nick555 0 August 11, 2023 Posted August 11, 2023 · Report post Сорри, похоже первый пост не туда написал, повторюсь здесь: Подскажите новичку, что не так проект на Stm32CubeIde В программе использую очередь freeRTOS, хочу проверить, есть ли задачи, ожидающие эту очередь. Контекстная подсказка видит (как и отладчик) эту структуру и выдает: MyQueueHandle->xTasksWaitingToReceive.uxNumberOfItem однако компилятор выдает ошибку: invalid use of undefined type 'struct QueueDefinition' Что я не так делаю? Quote Share this post Link to post Share on other sites More sharing options...
EdgeAligned 99 August 11, 2023 Posted August 11, 2023 · Report post Отвечал уже в соседней теме: Вы можете обращаться к функционалу FeeRTOS только через её API - список функций. Quote Share this post Link to post Share on other sites More sharing options...
x893 76 August 11, 2023 Posted August 11, 2023 · Report post 1 hour ago, EdgeAligned said: Вы можете обращаться к функционалу FeeRTOS только через её API - список функций. Но если сильно хочется, то можно и напрямую. Но проще конечно через API Quote Share this post Link to post Share on other sites More sharing options...
EdgeAligned 99 August 12, 2023 Posted August 12, 2023 · Report post Да не получится там напрямую, поскольку нужно будет вносить изменения в файлы самой РТОС, а это чревато, особливо когда нет понимания работы внутрянки РТОС. QueueHandle_t - это неполный тип структуры. Полный тип xQUEUE находится только внутри файла queue.c . Там в принципе то так и написано в комментах - такой стиль именования структуры сделан для защиты от поломания ядра системы 🙂 Quote Share this post Link to post Share on other sites More sharing options...
nick555 0 August 12, 2023 Posted August 12, 2023 · Report post Спасибо всем ответившим. Собственно, что-то подобное я и подозревал, xQUEUE тоже нашел Просто, как я и писал, смутил тот факт, что и в контекстной подсказке и в отладчике вся "истинная" структура прекрасно видна. В-общем, "защита от поломания" получилась как в анекдоте про попа - вы или трусы оденьте или крестик снимите. Quote Share this post Link to post Share on other sites More sharing options...
EdgeAligned 99 August 12, 2023 Posted August 12, 2023 · Report post А потому что написано на Си, а не на С++, потому закрыть видимость на уровне редактора не получается. Но компилятор то не дурак, следит за неправильными действиями. Если прям очень нужно, можете дописать в файл queue.c функцию, получающую доступ к полям этой структуры и вынести прототип ф-ции в queue.h, чтобы она была доступна. Но содержимое полей структуры изменять в добавленных ф-циях не следует, иначе РТОС может поломаться. Quote Share this post Link to post Share on other sites More sharing options...
x893 76 August 12, 2023 Posted August 12, 2023 · Report post 12 minutes ago, EdgeAligned said: А потому что написано на Си, а не на С++, потому закрыть видимость на уровне редактора не получается. Но компилятор то не дурак, следит за неправильными действиями. Если прям очень нужно, можете дописать в файл queue.c функцию, получающую доступ к полям этой структуры и вынести прототип ф-ции в queue.h, чтобы она была доступна. Но содержимое полей структуры изменять в добавленных ф-циях не следует, иначе РТОС может поломаться. Согласен. В следующей версии что-нибудь добавят/убавят и надо будет опять менять. Quote Share this post Link to post Share on other sites More sharing options...
kan35 7 August 16, 2023 Posted August 16, 2023 · Report post On 8/11/2023 at 6:15 PM, nick555 said: В программе использую очередь freeRTOS, хочу проверить, есть ли задачи, ожидающие эту очередь. .. Что я не так делаю? Есть вероятность, что вы делаете это зря. В API этого нет именно потому, что сложно представить зачем это может потребоваться, так как на уровне алгоритма работы приложения вы всегда знаете кто и где ждет очередь. Quote Share this post Link to post Share on other sites More sharing options...
haker_fox 63 August 17, 2023 Posted August 17, 2023 · Report post 16 hours ago, kan35 said: Есть вероятность, что вы делаете это зря. В API этого нет именно потому, что сложно представить зачем это может потребоваться, так как на уровне алгоритма работы приложения вы всегда знаете кто и где ждет очередь. Программист возможно и знает, кто и где может ожидать данные из очереди. Однако некая задача этого знать не обязана, но может сильно хотеть узнать. Зачем? Неважно. Может быть это консольная утилита, которая выводит статистику по ресурсам ОСРВ. P.S. Заметил по себе и по коллегам, которые плотно работают с ОСРВ, что возникает желание что-то доработать, добавить или откорректировать. Иногда желание переходит в действие. Не стоит идеализировать разработчика API этой ОСРВ. Хотя и бездумно что-то делать тоже не следует. Quote Share this post Link to post Share on other sites More sharing options...
kan35 7 August 17, 2023 Posted August 17, 2023 · Report post Тут главное - Не начать изобретать велосипед. если у тс очередь принимается из разных задач в разное время ( не одновременно же), то есть еще варианты синхронизации. Немного лирики. В 99% случаев, когда вопрос слишком уж замысловатый, это значит, что проблема совсем не про это, люди склонны создавать себе проблемы сами, знаю по себе))) Quote Share this post Link to post Share on other sites More sharing options...
x893 76 August 17, 2023 Posted August 17, 2023 · Report post 18 hours ago, haker_fox said: Программист возможно и знает, кто и где может ожидать данные из очереди. Однако некая задача этого знать не обязана, но может сильно хотеть узнать. Зачем? Неважно. Может быть это консольная утилита, которая выводит статистику по ресурсам ОСРВ. P.S. Заметил по себе и по коллегам, которые плотно работают с ОСРВ, что возникает желание что-то доработать, добавить или откорректировать. Иногда желание переходит в действие. Не стоит идеализировать разработчика API этой ОСРВ. Хотя и бездумно что-то делать тоже не следует. Так никто и не запрещает. Берите исходники и меняйте, что хотите. Quote Share this post Link to post Share on other sites More sharing options...