Перейти к содержанию
    

очередь freeRTOS

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

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

проект на Stm32CubeIde

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

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

MyQueueHandle->xTasksWaitingToReceive.uxNumberOfItem

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

invalid use of undefined type 'struct QueueDefinition'

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, EdgeAligned said:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 minutes ago, EdgeAligned said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

..

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 hours ago, kan35 said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 hours ago, haker_fox said:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...