Код
// очередь сообщений для вкл выкл
static xQueueHandle cmd_queue;
// возможные сообщения
#define MSG_ON 1
#define MSG_OFF 0
static uint32_t p_msg;
static __attribute__((naked)) portTASK_FUNCTION(Power_Task, pvParameters)
{
(void)pvParameters;
for (;;) {
portBASE_TYPE res = xQueueReceive(cmd_queue, (void*)&p_msg, portMAX_DELAY);
if (res != pdTRUE)
continue;
DBG("Power message: %d\n", p_msg);
....
}
}
// включить/выключить всё
void Power_On(unsigned char onoff)
{
uint32_t p_send_data;
if (onoff)
p_send_data = MSG_ON;
else
p_send_data = MSG_OFF;
DBG("Power send: %d\n", p_send_data);
xQueueSend(cmd_queue, (void*)&p_send_data, portMAX_DELAY);
}
// инициализация
void Power_Init(unsigned int stack_size, unsigned int priority)
{
cmd_queue = xQueueCreate(2, sizeof(p_msg));
...
static xQueueHandle cmd_queue;
// возможные сообщения
#define MSG_ON 1
#define MSG_OFF 0
static uint32_t p_msg;
static __attribute__((naked)) portTASK_FUNCTION(Power_Task, pvParameters)
{
(void)pvParameters;
for (;;) {
portBASE_TYPE res = xQueueReceive(cmd_queue, (void*)&p_msg, portMAX_DELAY);
if (res != pdTRUE)
continue;
DBG("Power message: %d\n", p_msg);
....
}
}
// включить/выключить всё
void Power_On(unsigned char onoff)
{
uint32_t p_send_data;
if (onoff)
p_send_data = MSG_ON;
else
p_send_data = MSG_OFF;
DBG("Power send: %d\n", p_send_data);
xQueueSend(cmd_queue, (void*)&p_send_data, portMAX_DELAY);
}
// инициализация
void Power_Init(unsigned int stack_size, unsigned int priority)
{
cmd_queue = xQueueCreate(2, sizeof(p_msg));
...
Вызываю Power_On с разными параметрами, на отладочной консоли вижу следующее
Код
Power send: 1
Power message: 1
...
Power send: 0
Power message: 1
Power message: 1
...
Power send: 0
Power message: 1
Второй раз отправил "0", а получил всё равно "1"

Как так?
cmd_queue и p_msg больше нигде не учавствуют.
Ничего не понимаю
