Цитата
2-3. Как написано в книге OSInit() создает два таска (который IDLE, и для сбора статистики) , OSStart() запускает диспетчер. Я думаю инициализацию МК можно сделать и до OS_Init(), но вот прерывания нужно разрешить до OS_Start(), т.к. после операционка улетит на диспетчер.
Обычно прерывания разрешаются автоматически при запуске задач, когда из стека достается PSW, в котором содержатся биты разрешения прерываний.
Цитата(Dizel @ Sep 28 2005, 02:25)
Таймер тиков вызывает диспетчер, поэтому нельзя его звать до OSStart().
Можно, поскольку в ОС везде где надо проверяется OSRunning.
И если прерывание тика ОС возникнет до запуска ОС, то сервисы ОС вызваны не будут.
Цитата
При портировании в OSStart() должен сидеть код который разрешает 1) прерывание от таймера зовущего диспетчер
В OsStart никакой код, разрешающий какие-либо прерывания не включается. Портируетсмя только функция запуска OC, которая устанавливает OSRunning = true и переключается в указанную задачу.
Цитата
2) глобальные прерывания
Однако скорее всего в вашей системе живут еще и другие прерывания (например от PWM), так вот их надо разрешить до OSStart(), т.к. после OSStart() система начнет исполнять диспетчер.
Эти прерывания целесообразно разрешать после инициализации тех ресурсов, которые в этих прерываниях будут использоваться.
Цитата(JeDay @ Sep 27 2005, 20:11)
Спасибо.
А на счет прерываний, то в даташите написано что нельзя запускать таймер тиков до OSStart т.е. наверно и разрешать прерывания тоже нельзя ?
разрешать прерывания можно, главное обеспечить, чтобы не вызывались сервисы ОС до инициализации самой ОС, и не использовались ресурсы (sem, que, etc) до инициализации этих ресурсов.
Дурость там заключается в том, что если хочется использовать задачу статистики, то нужно сначала запустить ОС с 1 задачей, в которой инициализировать таймер ОС и вызывать OsStatInit, где делается задержа в некоторое количество тиков, а idle в это время молотит счетчик в цикле. Как время задержки истекает, stat запоминает, докуда idle достчитала и этот параметр используется как параметр быстродействия системы, то есть когда система курит бамбук все время. Если разрешить еще какие-либо прерывания, то они отожрут процессорное время и параметр оценки быстродействия исказится.
В общем, если Stat не нужно, то можно на это забить и создать все задачи, таймер тиков ОС и потом сделать OSStart(). В начале каждой задачи заинитить ее ресурсы, периферию и прерывания, которые этой задачей будут обрабатываться
Цитата
А еще вопросик:
Работает ли данная ОС под ATMega128 аппаратно с внешней памятью ? Или только с внутренней 4кБ ?
Не вижу причин, почему с внешней не должно работать. Для внешнего ОЗУ используются те же команды, что и для внутреннего, насколько я помню. Это ж не х51.
Пасу котов...