Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с queue
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
Terminator
Есть такой кусок кода

Код
// очередь сообщений для вкл выкл
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


Второй раз отправил "0", а получил всё равно "1" 07.gif
Как так?

cmd_queue и p_msg больше нигде не учавствуют.

Ничего не понимаю help.gif
zltigo
Ничего криминального в приведенном отрывке нет. Проблемы где-то в другом месте.
P.S.
явные преобразования к void * и контроль на возвращаемое функцией xQueueReceive() значение при вызове ее с portMAX_DELAY - просто лишние.
P.P.S
попробуйте p_send_data сделать глобальной - бывали случаи, когда компилятор-ы пытались адрес реристровой переменной брать...
Terminator
преобразование к void* я уже в процессе поиска проблемы дописал.
Я даже не представляю в какую сторону копать...

p_send_data пробовал делать глобальной и p_msg всяко разно пробовал определять. Результат один и тот же.
zltigo
Цитата(Terminator @ Jul 7 2008, 09:24) *
Я даже не представляю в какую сторону копать...

Копать в другом месте.
Terminator
Проблема оказалась в увлечении атрибутом nacked
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.