最近一直在看实时操作系统工作原理,看了一下《FreeRTOS内核实现与应用开发实战指南:基于STM32》对freertos和实时操作系统有了一个大概了解。但freertos代码还是太多,功能也多。
于是在github上找到了atomthreads,地址是https://github.com/kelvinlawson/atomthreads。
这个系统非常小巧,但实时操作系统该有的都有了,对于想学习实时操作系统原理的同学非常有帮助。
它的ports中有qemu模拟器的,在qemu_integratorcp目录,不用板子也能愉快的玩耍。
但这个代码有点老了,都是5,6年前的代码,我在用现在的qemu版本模拟它的程序时,发现定时器无法起作用,导致任务无法切换,具体开启定时器的代码在:
int
low_level_init (void)
{
printf("low_level_init\n");
board_pic->IRQ_ENABLECLR = ICP_PIC_IRQ_TIMERINT0 ;
board_timer_0->INTCLR = 1 ;
board_pic->IRQ_ENABLESET |= ICP_PIC_IRQ_TIMERINT0 ;
board_timer_0->LOAD = TIMER0_CLOCK_SPEED / SYSTEM_TICKS_PER_SEC ;
board_timer_0->BGLOAD = TIMER0_CLOCK_SPEED / SYSTEM_TICKS_PER_SEC ;
board_timer_0->CONTROL = ICP_TIMER_CONTROL_ENABLE |
ICP_TIMER_CONTROL_MODE |
ICP_TIMER_CONTROL_IE |
ICP_TIMER_CONTROL_TIMER_SIZE ;
char str[128];
sprintf(str,"low_level_init2:%d\n",(unsigned int)board_pic->IRQ_STATUS);
printf(str);
return 0 ;
}
qemu模拟的芯片是ARM926EJ-S,对这个型号的芯片如何开启定时器不太了解,希望大神能帮忙解决一下,谢谢!
离线