реклама на сайте
подробности

 
 
> Проблемы с queue, FreeRTOS
Terminator
сообщение Jul 7 2008, 06:26
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Есть такой кусок кода

Код
// очередь сообщений для вкл выкл
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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
zltigo
сообщение Jul 7 2008, 07:02
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Terminator
сообщение Jul 7 2008, 07:24
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



преобразование к void* я уже в процессе поиска проблемы дописал.
Я даже не представляю в какую сторону копать...

p_send_data пробовал делать глобальной и p_msg всяко разно пробовал определять. Результат один и тот же.

Сообщение отредактировал Terminator - Jul 7 2008, 07:27
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 7 2008, 07:29
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



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

Копать в другом месте.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Terminator
сообщение Jul 9 2008, 04:33
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382



Проблема оказалась в увлечении атрибутом nacked
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016