Easyelectronics.ru

Электроника для всех
Текущее время: 21 сен 2017, 22:54

Часовой пояс: UTC + 5 часов



    • JLCPCB for PCB Prototyping: 10 шт. 2-слоя 100*100mm 2$(около 140rub), изготовление за 24 часа.
    • Создание принципиальных схем и проектирование печатных плат
    • Крупнейший китайский онлайн магазин радиодеталей. Скидка 50%
    • Просмотр GERBER файлов

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Странности работы очереди
СообщениеДобавлено: 03 сен 2017, 22:52 
Только пришел

Зарегистрирован: 13 окт 2016, 03:10
Сообщения: 25
Всем привет.
Вопрос по очередям и особенностям их использования.
Есть таск №1, какой пишет в очередь.
Код:
for(int i=0; i < UART1.LData; i++) xQueueSend(UART1.RxQueue[UART1.Ch], &UART1.DATA[i], 1);


Во таске №2 ожидаются данные из этой очереди.
Код:
for( ; uxQueueMessagesWaiting(UART1.RxQueue[0])==0 ; )
        osDelay(1);


Проблема в следующем.
В первом таске в очередь всё записалось.
Специально проверял
Код:
OTLFlag1 = uxQueueMessagesWaiting(UART1.RxQueue[0]);

И OTLFlag1 = 7.

А вот во тором таске, так и висим, т.к. в таске ничего не найдено.
Куда копать?
Уже мозг сломал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Странности работы очереди
СообщениеДобавлено: 03 сен 2017, 23:18 
Старожил
Аватара пользователя

Зарегистрирован: 04 окт 2011, 10:19
Сообщения: 986
Телепатия еще не развилась.
А что, отладчик тоже сломан ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Странности работы очереди
СообщениеДобавлено: 03 сен 2017, 23:25 
Только пришел

Зарегистрирован: 13 окт 2016, 03:10
Сообщения: 25
x893 писал(а):
Телепатия еще не развилась.
А что, отладчик тоже сломан ?

Знал бы я как там посмотреть )) Я чайник.
Пока я вижу в памяти что данные принятые в очереди есть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Странности работы очереди
СообщениеДобавлено: 03 сен 2017, 23:55 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 357
Неправильно вы как то обращаетесь с очередями.
Отправив элемент в очередь, надо проверить возвращаемое состояние успешности записи элемента:
Код:
void prvTask_Sender(void *pvParameters)
{
   static BaseType_t error = 0;   // состояние отправки
   static char *ptrbuf = buffer;   // указатель на буфер

   xQueueSender = xQueueCreate(SIZE_QUEUE, sizeof(char));

   for (;;)
   {
      while(*ptrbuf)  // пока не достиг конца текстовой строки,
      {
         /* байт отправляется в очередь */
         error = xQueueSend(xQueueSender, (void*)ptrbuf, portMAX_DELAY);

         /* и проверяется результат */
         if (error == pdPASS)
            ptrbuf++;   // если байт был отправлен, то указатель на следующ.элем.

      }
   }
}


И принимая из очереди, тоже надо проверять успешность
Код:
void prvTask_Reciever(void *pvParameters)
{
   static BaseType_t error = 0;   // состояние отправки
   static char *ptrbuf = buffer2;   // указатель на буфер

   for (;;)
   {
      while(ptrbuf != (buffer2+100))
      {
         /* байт принимается из очередь */
         error = xQueueReceive(xQueueSender, (void*)ptrbuf, 1000);

         /* и проверяется результат */
         if (error == pdPASS)
            ptrbuf++;   // если байт был принят, то указатель на следующ.элем.

      }
   }
}//----------------------------------------------


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Странности работы очереди
СообщениеДобавлено: 04 сен 2017, 09:59 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 1506
Откуда: Русь, Новороссийск
BusMaster, а насколько кошерно целый тик молотить в цикле for, чтобы потом "забыть" про эту очередь на несколько тиков под другими задачами?
Может, кошернее разок проверить очередь и быстро отдать управление диспетчеру?

Я тоже нуб в программировании, мне ответ нужен для общего развития.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB