Easyelectronics.ru • Просмотр темы - Странности работы очереди

Easyelectronics.ru

Электроника для всех
Текущее время: 15 авг 2018, 22:04

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

Зарегистрирован: 13 окт 2016, 03:10
Сообщения: 27
Всем привет.
Вопрос по очередям и особенностям их использования.
Есть таск №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
Сообщения: 1375
Телепатия еще не развилась.
А что, отладчик тоже сломан ?


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

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

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


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

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2102
Неправильно вы как то обращаетесь с очередями.
Отправив элемент в очередь, надо проверить возвращаемое состояние успешности записи элемента:
Код:
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
Сообщения: 2074
Откуда: Русь, Новороссийск
BusMaster, а насколько кошерно целый тик молотить в цикле for, чтобы потом "забыть" про эту очередь на несколько тиков под другими задачами?
Может, кошернее разок проверить очередь и быстро отдать управление диспетчеру?

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


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

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


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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