Gast
#1751579
Hi
hab da ein kleines Problem mit der Funktion "atoi".
Der Code soll aus meinen Nachrichten ein Command und einen wert
interpretieren. Das Command wird immer perfekt kopiert. Der Wert wird
imemr perfekt kopiert aber die letzten 3 Zeilen sind die wichtigsten.
Sobald ich den Wert umwandele klappt es beim ersten mal danach kommt nur
noch mist. Dachte immer atoi kann Zeichen in max 16Bit werte umwandeln.
Habe folgenden Code:
void command()
{
char fifo[15] = ""; //copyed command
uint8_t pfifo = 0; //current fifo point
char command[10]; //command
uint8_t pcommand = 0; //current command point
char value[5] = "!!!!!";//value as Charakters
uint8_t pvalue = 0; //current value point
uint16_t val = 0; //value
bool ok = false; //OK FLAG
char buffer[5];
char massage[20];
//Reset Command found Flag
uart.comm_found = false;
//Read and Write Pointer equal?
if(uart.rx.pread == uart.rx.pwrite)
return false;
//Copy Command from RX Fifo
do
{
fifo[pfifo] = uart.rx_buffer[uart.rx.pread];
uart.rx_buffer[uart.rx.pread] = '!';
uart.rx.pread++;
pfifo++;
uart.rx.used_size--;
if(uart.rx.pread >= uart.rx.size)
uart.rx.pread = 0;
if(pfifo > 15)
return false;
}
while(uart.rx_buffer[uart.rx.pread] != '#');
//copy and delete the last '#'
fifo[pfifo] = uart.rx_buffer[uart.rx.pread];
uart.rx_buffer[uart.rx.pread] = '!';
uart.rx.pread++;
if(uart.rx.pread >= uart.rx.size)
uart.rx.pread = 0;
//Copy Command from Fifo
pfifo = 0;
while(fifo[pfifo] != '=')
{
command[pcommand] = fifo[pfifo];
pcommand++;
pfifo++;
if(pcommand > 10)
return false;
}
command[pcommand] = '\0';
//Jump over '='
pfifo++;
//Copy Value from Fifo
while(fifo[pfifo] != '#')
{
value[pvalue] = fifo[pfifo];
pvalue++;
pfifo++;
if(pvalue > 5)
return false;
}
//Clean Value
while(value[4] == '!')
{
value[4] = value[3];
value[3] = value[2];
value[2] = value[1];
value[1] = value[0];
value[0] = ' ';
}
send_uart(", ");
val = atoi(value);
itoa(val,buffer,10);
send_uart(buffer);
}
Jemand eine Idee?