Estoy usando un CC1110 de Texas Instruments, que se basa en el microcontrolador 8051 . Lo estoy programando usando el IAR Embedded Workbench.
He escrito una función llamada sendChar
que envía un char de 8 bits a través de la interfaz UART.
Ejecutando el siguiente código:
sendChar('H');
sendChar('e');
sendChar('l');
sendChar('l');
sendChar('o');
sendChar(' ');
sendChar('W');
sendChar('o');
sendChar('r');
sendChar('l');
sendChar('d');
Los resultados en el comportamiento esperado de Hello world
se envían a través del canal UART. Pero luego definiendo la función sendString
como:
void Serial::sendString(char *str) {
unsigned int i;
for(i = 0; i < strlen(str); i++) this->sendChar(str[i]);
}
y ejecutando el siguiente código:
sendString("Hello world");
los resultados en 0xFF
se envían más de 100 veces.
Me he dado cuenta de que enviar la salida strlen
con la función sendChar
revela que se está generando la longitud de cadena incorrecta. Por ejemplo, si ejecuto el siguiente código:
char str[100] = "Hello world";
sendChar(strlen(str));
Recibo 101
en lugar de 11
como uno esperaría.
¿Qué estoy haciendo mal?
Editar
Si ejecuto el siguiente código:
char str[100] = "Hello world";
sr.sendChar(str[1]);
sr.sendString(str);
uno esperaría recibir eHellow world
, pero en cambio recibo 101 puntos .
(0xFF).
Editar 2
Código completo:
#include <ioCC1110.h>
#include <ioCCxx10_bitdef.h>
#include <math.h>
#include <string>
void sendChar(char c);
void sendString(char *str);
void main(void) {
CLKCON = 0; // Crystal oscillator, no pre-scaler
U0CSR |= U0CSR_MODE; // USART0 in UART mode
P0SEL |= BIT3 | BIT2; //P0.2 and P0.3 as peripherials
// Baud rate = 9600 (9597)
U0GCR |= 8;
U0BAUD = 131;
// Enable Rx and Tx interrupts
IEN2 |= IEN2_UTX0IE;
URX0IE = 1;
while(P0_4); // Wait for P0.4
char str[100] = "Hello world";
sr.sendString(str);
while(1); // Wait so main() never ends
}
void sendString(char *str) {
while (*str) sendChar(*str++);
}
void sendChar(char c) {
U0DBUF = c & 0xFF;
while(!UTX0IF);
UTX0IF = 0;
}
Editar 3
He ejecutado un principal sencillo:
int main( void ) {
char str[] = "Hello world";
CLKCON = 0; // Crystal oscillator, no pre-scaler
P2DIR = 1; // P2.0 as output
P2 = 0;
char l = str[2];
Serial sr;
while(P0_4);
sr.sendString(str);
while(1);
}
y lo depuré. Aquí hay una captura de pantalla del valor de la matriz str
.
Está lleno de puntos, como informé anteriormente.
¿Alguna idea sobre qué está causando eso?