Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
СИ, массив функций, привязка дефайнов к номеру функции в массиве
Отправлено
mandigit 11 марта 2008 г. 22:05
Пиплы,
есть массив функций вида:
typedef struct
{
INT8U Priority;
void (* MnvrProc)(void);
} TMnvr;
__flash TMnvr MnvrArr[]=
{
{0, MnvrStart}, //0
{1, MnvrBack}, //1
{2, MnvrBackLeft}, //2
{2, MnvrBackRight}, //3
{3, MnvrExtrusion}, //4
{4, MnvrTargetTracing}, //5
{5, MnvrSearchTarget}, //6
{6, MnvrForward}, //7
{7, MnvrRamble}, //8
{0xFF, MnvrDummy}, //9
{0xFF, MnvrDummy}, //10
{0xFF, MnvrDummy}, //11
{0xFF, MnvrDummy}, //12
{0xFF, MnvrDummy}, //13
{0xFF, MnvrDummy}, //14
{0xFF, MnvrDummy}, //15
};
Отдельно используются дефайны вида:
#define MNVR_START 0
#define MNVR_BACK 1
#define MNVR_BACK_LEFT 2
#define MNVR_BACK_RIGHT 3
#define MNVR_EXTRUSION 4
#define MNVR_TARGET_TRACING 5
#define MNVR_SEARCH_TARGET 6
#define MNVR_FORWARD 7
#define MNVR_RAMBLE 8
#define MNVR_DUMMY 15
если я вставляю в середину массива какую-то новую функцию - приходится все дефайны переопределять. Можно-ли как-то исхитрится и объединить : вставив функцию в массив, автоматически определять дефайн, соответствующий номеру этой функции в массиве?
Составить ответ | Вернуться на конференцию
Ответы
- Есть два варианта. В обеих порядок определяется ТОЛЬКО enum-ом (+) — ReAl (12.03.2008 10:58:19 193.111.248.46, 1240 байт)
- дурная идея, накурился немного не того я (+) — DASM (12.03.2008 02:18:13 212.58.192.14, 489 байт)
- все верно, энум единственный выход, но он избавит только от гемора руцной перенумерации дефайнов если что, порядок же как в энуме так и в массиве придеца блюсти полюбэ — ы (12.03.2008 01:52:4 217.118.66.24, пустое)
- О, вечная моя головная боль. Пока не придумал ничего лучше, как определять функцию, номер (и у меня еще текст) - в одном месте.Типа (+) — Vladimir Ljaschko (11.03.2008 23:18:53 93.84.21.19, 274 байт)
- Можно все это сделать при помощи скрипта, который при сборке проекта сгенерит Вам С-шный хидер, а компилятор уже его возьмет готовым. Главное правильно написать makefile или pre-build step. Этим часто пользуются разработчики линуксовых программ. — SM (11.03.2008 22:56:42 80.92.255.53, пустое)
- низя — F8 (11.03.2008 22:09:13 92.112.142.231, пустое)
- А enum на что придуман? — =AVR= (11.03.2008 22:08:53 80.92.96.19, пустое)