sirve - un bucle for no ejecutado en un sistema operativo C
lenguaje c if else ejemplos (2)
Ahora está usando el switch (Command)
donde el Command
mantiene la dirección de la table
variable od.
Cambiar a switch
switch (*Command) { //Use value at pointed Command.
}
Y tenga en cuenta que, al hacer *Command
, desreferencia el char
que es de 1 byte. Sus ID tienen 2 bytes, por lo tanto, tiene pérdida de datos.
Cambio:
static char table[] = {ID_01, ID_02 ,ID_03, ID_04, .... , ID_LAST}
a corto tener valores de 16 bits
static unsigned short table[]={ID_01, ID_02 ,ID_03, ID_04, .... , ID_LAST}
Más tarde, modifique su función de process
para aceptar un unsigned short
void process( const unsigned short *table) { //Unsigned short
int LastId = 0;
unsigned short *Command; //Unsigned short
for ( Command=table; LastId==0 ; Command++){
switch(*Command) { //Added star
//...
}
}
//...
Reescribiría su código de process
para:
void process(const unsigned short *table, size_t tableLen) {
while (tableLen--) {
switch (*table) {
case ID_1: /* Do stuff */ break;
}
table++; //Increase pointer to next ID element
}
}
//Usage then like this:
static unsigned short table[] = {ID_1, ID_2, ID_3, ..., ID_n};
//Put pointer and length of table
process(table, sizeof(table)/sizeof(table[0]));
Tengo problemas al ejecutar un bucle for, creé una tabla estática que contiene valores definidos, luego paso mi tabla como argumento en una función para procesar. Básicamente, mi código se parece al siguiente:
#define ID_01 0x0000
#define ID_02 0x0001
#define ID_03 0x0002
#define ID_04 0x0003
#define ID_05 0x0004
#define ID_06 0x0005
#define ID_07 0x0006
#define ID_08 0x0007
#define ID_09 0x0008
/*...
*/
#define ID_LAST 0xFFFF
static char table[]={
ID_01, ID_02 ,ID_03, ID_04, .... , ID_LAST}
void process( char *table){
int LastId=0;
char *Command;
for ( Command=table; LastId==0 ; Command++){
switch(Command)
{
case ID_01:
do_stuff01();
break;
case ID_02:
do_stuff02();
break;
...
case ID_LAST:
LastId=1;
break;
default:
break;
}
}
}
Intenté imprimir algunos mensajes para depurar, pero el programa no ejecuta ninguno de los impresos, incluso aquellos antes del ciclo para y después del ciclo.
Pero cuando cambié mi bucle for por:
for(i=0;i<10;i++)
todos los mensajes fueron impresos. pero tengo que procesar de la misma manera que hice en primer lugar.
PD: esta parte del código se ejecuta en una tarea del sistema operativo que se ejecuta en un microcontrolador y solo soy un principiante.
En general, hace struct y mapea el ID / FUNC como abajo.
#include <stdio.h>
#define ID_01 0x0000
#define ID_02 0x0001
/* ... */
#define ID_LAST 0xFFFF
typedef void (*func)();
typedef struct {
char n;
func f;
} fmap;
void do_something01() { }
void do_something02() { }
/* ... */
static fmap fmaps[] = {
{ID_01, do_something01},
{ID_02, do_something02},
/* ... */
{ID_LAST, NULL},
};