ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
132611 Топик полностью
Alex B. (26.09.2008 12:59, просмотров: 81) ответил VVB на описанную вами структуру надо где-то хранить и защищать (это критические данные).
действительно не понимаете... Зачем статически-то структуру объявлять? во-первых, в uCOS-II есть такой объект как "блоки памяти фиксированного размера". И эту структуру, указатель на которую вы передаете в очереди, вы будете каждый раз выделять из блока памяти, а в задаче, которая команду принимает - освобождать. Все это безопасно (бо встроенный в РТОС сервис) и практично. А сейчас вы используете очереди (которые предназначены для передачи указателя на сообщение) не для передачи указателя, а для передачи самого сообщения, и не важно, что сообщении у вас передается адрес. Ну а во вторых, если приемник у вас - наиболее приоритетная задача, вообще проблем не вижу. Структура сообщения будет локальной переменной для функции-передатчика, и она уже не попортится, пока сообщение не отработается в приемнике. Каждая функция-передатчик выделит у себя структуру для сообщения. И в этом случае можно (и нужно) использовать не очередь (она нужна чтоб не задерживать приход сообщения), а мейлбокс. void task_transmitter_1 (void) { alarm_cmd alarm; .... alarm.type = ADD_ALARM; alarm.addr = &КАКОЙ_ТО_АДРЕС_ВО_ФЛЕШИ; OSQPost(&AlarmQ, &alarm); /* сюда мы можем вернуться только после того, как задача-приемник отработает сообщение, так как у нее наивысший приоритет */ .... } void task_transmitter_2 (void) { alarm_cmd alarm; .... alarm.type = REL_ALARM; alarm.addr = &КАКОЙ_ТО_ДРУГОЙ_АДРЕС_ВО_ФЛЕШИ; OSQPost(&AlarmQ, &alarm); /* сюда мы можем вернуться только после того, как задача-приемник отработает сообщение, так как у нее наивысший приоритет */ .... } void task_receiver (void) { alarm_cmd *alarm; .... alarm = OSQPend(&AlarmQ, ...); /* теперь alarm указатель на alarm первой или второй задачи */ .... } Ну и в третьих - вот это: Динамическое выделение памяти применительно встраиваемых систем управления -- неприемлимое зло. - имхо очередной миф. Местный посетитель abivan разрабатывает девайсы, сетртифицированные для атомной промышленности и вовсю использует динамическое выделение памяти (собственный менеджер правда использует, ну да ладно). Причем на PIC18. А дураку (вас не имею в виду) дай в руки хуй стеклянный - он и хуй разобьет и руки порежет...
Согласуйте импеданс!