Jump to content
    

очередь freeRTOS

Сорри, похоже первый пост не туда написал, повторюсь здесь:

Подскажите новичку, что не так

проект на Stm32CubeIde

В программе использую очередь freeRTOS, хочу проверить, есть ли задачи, ожидающие эту очередь.

Контекстная подсказка видит (как и отладчик) эту структуру и выдает:

MyQueueHandle->xTasksWaitingToReceive.uxNumberOfItem

однако компилятор выдает ошибку:

invalid use of undefined type 'struct QueueDefinition'

Что я не так делаю? 

Share this post


Link to post
Share on other sites

Отвечал уже в соседней теме: 

Вы можете обращаться к функционалу FeeRTOS только через её API  - список функций.

Share this post


Link to post
Share on other sites

1 hour ago, EdgeAligned said:

Вы можете обращаться к функционалу FeeRTOS только через её API  - список функций.

Но если сильно хочется, то можно и напрямую. Но проще конечно через API

Share this post


Link to post
Share on other sites

Да не получится там напрямую, поскольку нужно будет вносить изменения в файлы самой РТОС, а это чревато, особливо когда нет понимания работы внутрянки РТОС.

QueueHandle_t - это неполный тип структуры. Полный тип xQUEUE находится только внутри файла queue.c . Там в принципе то так и написано в комментах - такой стиль именования структуры сделан для защиты от поломания ядра системы 🙂

Share this post


Link to post
Share on other sites

Спасибо всем ответившим. Собственно, что-то подобное я и подозревал, xQUEUE тоже нашел

Просто, как я и писал, смутил тот факт, что и в контекстной подсказке и в отладчике вся "истинная" структура прекрасно видна.

В-общем, "защита от поломания" получилась как в анекдоте про попа - вы или трусы оденьте или крестик снимите.

 

Share this post


Link to post
Share on other sites

А потому что написано на Си, а не на С++, потому закрыть видимость на уровне редактора не получается. Но компилятор то не дурак, следит за неправильными действиями.

Если прям очень нужно, можете дописать в файл queue.c функцию, получающую доступ к полям этой структуры и вынести прототип ф-ции в queue.h, чтобы она была доступна. Но содержимое полей структуры изменять в добавленных ф-циях не следует, иначе РТОС может поломаться.

Share this post


Link to post
Share on other sites

12 minutes ago, EdgeAligned said:

А потому что написано на Си, а не на С++, потому закрыть видимость на уровне редактора не получается. Но компилятор то не дурак, следит за неправильными действиями.

Если прям очень нужно, можете дописать в файл queue.c функцию, получающую доступ к полям этой структуры и вынести прототип ф-ции в queue.h, чтобы она была доступна. Но содержимое полей структуры изменять в добавленных ф-циях не следует, иначе РТОС может поломаться.

Согласен. В следующей версии что-нибудь добавят/убавят и надо будет опять менять.

Share this post


Link to post
Share on other sites

On 8/11/2023 at 6:15 PM, nick555 said:

В программе использую очередь freeRTOS, хочу проверить, есть ли задачи, ожидающие эту очередь.

..

Что я не так делаю? 

Есть вероятность, что вы делаете это зря. В API этого нет именно потому, что сложно представить зачем это может потребоваться, так как на уровне алгоритма работы приложения вы всегда знаете кто и где ждет очередь.

Share this post


Link to post
Share on other sites

16 hours ago, kan35 said:

Есть вероятность, что вы делаете это зря. В API этого нет именно потому, что сложно представить зачем это может потребоваться, так как на уровне алгоритма работы приложения вы всегда знаете кто и где ждет очередь.

Программист возможно и знает, кто и где может ожидать данные из очереди. Однако некая задача этого знать не обязана, но может сильно хотеть узнать. Зачем? Неважно. Может быть это консольная утилита, которая выводит статистику по ресурсам ОСРВ.

P.S. Заметил по себе и по коллегам, которые плотно работают с ОСРВ, что возникает желание что-то доработать, добавить или откорректировать. Иногда желание переходит в действие. Не стоит идеализировать разработчика API этой ОСРВ. Хотя и бездумно что-то делать тоже не следует.

Share this post


Link to post
Share on other sites

Тут главное - Не начать изобретать велосипед.

если у тс очередь принимается из разных задач в разное время ( не одновременно же), то есть еще варианты синхронизации.

Немного лирики. В 99% случаев, когда вопрос слишком уж замысловатый, это значит, что проблема совсем не про это, люди склонны создавать себе проблемы сами, знаю по себе)))

Share this post


Link to post
Share on other sites

18 hours ago, haker_fox said:

Программист возможно и знает, кто и где может ожидать данные из очереди. Однако некая задача этого знать не обязана, но может сильно хотеть узнать. Зачем? Неважно. Может быть это консольная утилита, которая выводит статистику по ресурсам ОСРВ.

P.S. Заметил по себе и по коллегам, которые плотно работают с ОСРВ, что возникает желание что-то доработать, добавить или откорректировать. Иногда желание переходит в действие. Не стоит идеализировать разработчика API этой ОСРВ. Хотя и бездумно что-то делать тоже не следует.

Так никто и не запрещает. Берите исходники и меняйте, что хотите.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...