Добавлю Для начала помимо книжки по 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/
-
- Ответ: JeDay(365 знак., 27.09.2005 00:09, )
- OSTimeTick() никогда не вызывают из задачи, ибо ОС не будет "тикать". Алексей Мусин(45 знак., 27.09.2005 07:35, )
- Ответ: JeDay(365 знак., 27.09.2005 00:09, )