while sirve sentencia que programacion para lenguaje for else ejemplos ciclo c operating-system microcontroller

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}, };