yurmala 0 14 сентября, 2011 Опубликовано 14 сентября, 2011 (изменено) · Жалоба Во всех примерах идущих с TNKernel все прерывания (от всех источников) обрабатываются в функции tn_cpu_irq_handler void tn_cpu_irq_handler(void) { register int irq_stat; irq_stat = VICIRQStatus; if((irq_stat & (1<<4)) > 0) //-- Source - TIMER0 { ... } ... elseif((irq_stat & (1<<17)) > 0) //-- Source - EINT3 { ... } ... Правильно ли я понимаю, что так заложено в самой RTOS? У меня не работает вызов обработчика после такой конструкции: VICVectAddr17 = (U32)procISR_Handler; VICIntEnable |= (1 << 17); ... void procISR_Handler (void) __irq { ... VICVectAddr = 0; } Просто хотелось бы все обработчики логически оформленных модулей вынести в эти отдельные модули (для миграции с одного проекта на другой в будущем...) p.s. Нет, я могу конечно у моего обработчика убрать _irq и в tn_cpu_irq_handler вызывать его как обычную процедуру: void tn_cpu_irq_handler(void) { register int irq_stat; irq_stat = VICIRQStatus; if((irq_stat & (1<<4)) > 0) //-- Source - TIMER0 { ... } ... elseif((irq_stat & (1<<17)) > 0) //-- Source - EINT3 { procISR_Handler(); } но как-то не совсем модульно....имхо. Изменено 14 сентября, 2011 пользователем yurmala Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
:-) 0 15 мая, 2012 Опубликовано 15 мая, 2012 · Жалоба Любопытно, как в итоге вы обрабатываете прерывания? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 19 мая, 2012 Опубликовано 19 мая, 2012 · Жалоба Функция tn_cpu_irq_handler() используется только в примерах. Реально в ней нет никакой небходимости ( в смысле RTOS). В TNKernel встроен только обрботчик системного таймера. Все остальные Вы можете оформлять обычным образом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться