ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
12 мая
39942 Топик полностью
Алексей Мусин (26.09.2005 07:36, просмотров: 1) ответил JeDay на RTOS - uCOS-II (для AVR). Спецы помогите... Папу вопросиков интересует
Добавлю Для начала помимо книжки по ucos (обязон!) рекомендую прочитать документацию (первые главы) по scmrtos, там на родном русском разжевано, что такое ОС, задача, и зачем ей нужен стек. http://www.scmrtos.narod.ru ВП> 1. Из каких соображений выбирать глубину стека ? Из соображений ВП> вложенных прерываний ? Если не хочу вложенных то сколько резервировать стека ? Стека чего? Задачи? Если задачи, то нужно учитывать все ее локальные переменные, а также потребности в стеке вызываемых функций. Для AVR вообще есть 2 стека - для адресов возврата (для возвращения в нужную точку программы после вызова обычной подпрограммы или подпрограммы обработки прерывания) и для данных (сохранение регистрвов). Если про стек, задаваемый в линкере, то все обчыно. ВП> 2. В примере Ex1-OS перед OSInit() присвоение значения размера ВП> стека. Это надо делать ? В даташите этого не нашел. ВП> OSTaskStkSize = OS_TASK_IDLE_STK_SIZE; // ? ВП> OSTaskStkSizeHard = OS_TASK_IDLE_STK_SIZE_HARD; // ? ВП> OSInit(); эти константы задаются в os_cfg.h ВП> 4. Как корректно вызвать OSTimeTick() из прерывания по совпадению ВП> от системного таймера? Насколько я понял, надо както хитро ВП> стек сохранять...и критические секции вводить... найти порт для ucos и подсмотреть :) ВП> 5. Где правильнее всего инициализировать МК ? Перед OSInit(), ВП> перед OSStart() или гдето в другом месте ? Периферию можно инициализировать когда угодно. Задачи можно создавать только после OSInit(). ВП> 6. os_cpu_c.c - Листинг заблокирован. Как Hook функции переопределить ? не знаю, что такое заблокирован листинг (может опции включить?). про хуки - в os_cfg.h см. OS_CPU_HOOKS_EN ВП> 7. Нужны ли мемори блоки ? Или можно обойтись обычным выделением памяти ? Зависит от контекста. Еслм память нужна для органиазции обмена между задачами посредством queue, то лучше применить os_mem. Если память нужна только для одной задачи (циркулярный буфер нужен или что-то подобное), то выгоднее свое сделать (из соображений, что критические секции не надо городить). ВП> 8. Когда разрешать прерывания ? Или OSStart() устанавливает сама ? найти порт для ucos и подсмотреть :) ВП> Пришлите плиз исходник инициализации ОС, или проектик какой нить, если есть. Там для ARM http://www.lamer0k.nm.ru/