Hi,
ich habe in C folgendes Makro definiert, daß mir ein paar initialisierte Variablen anlegen soll:
Code
#define RTOS_TASK(function, stack, prio) \
static uint8_t function##Stack[stack]; \
void function (void*) __attribute__((noreturn)); \
prog_char function##Name[] = "function"; \
static TCB function##Tcb = \
{ \
.stack_ptr = &function##Stack[stack], \
.priority = prio, \
.u.TaskFunc = function, \
.init_stack_ptr = function##Stack, \
.stack_size = sizeof(function##Stack), \
.stack_usage = 0, \
.TaskName = function##TaskName, \
}
Alles anzeigen
Das verwende ich im Code dann so:
und erwarte folgendes Ergebnis:
Code
static uint8_t MainTaskStack[128];
static prog_char MainTaskName[] = "MainTask";
static TCB MainTaskTcb =
{
.stack_ptr = &MainTaskStack[128],
.priority = 4,
.u.TaskFunc = MainTask,
.init_stack_ptr = MainTaskStack,
.stack_size = sizeof(MainTaskStack),
.stack_usage = 0,
.TaskName = MainTaskName,
};
Alles anzeigen
Leider wird die Variable MainTaskName falsch initialisiert. Das Makro setzt den Parameternamen des Makros (function) anstelle des übergebenen Parameters (MainTask) ein.
Wie muß ich das Makro verbiegen, sodaß der übergebene Name im initialisiertem String landet?
Gruß
e9hack