![Rank: 8](images/default/star_level3.gif) ![Rank: 8](images/default/star_level3.gif)
- UID
- 872238
|
其中的Timer0Init();用于硬件定时器0的初始化,事实上,ZLG的移植代码的μC/OS-Ⅱ的时钟节拍是
通过定时器0提供的,不在主程序里调用这个函数,μC/OS-Ⅱ的时钟源就无法打开;但是,没有开启
时钟源的μC/OS-Ⅱ是同样能运行的,只是内核提供的延时和等待时限机制都不起作用,系统虽能将
就运行,但因没调用TargetInit()而使内核功能不健全。
请注意,TargetInit()中的另一个函数VICInit ()是用来中断的初始化,它其中含有对UART0中断的
分配,在用户程序里需要根据使用的硬件中断修改这部分代码,否则,这些硬件中断无法开启;
再者,在不调用TargetInit()的时候,硬件的中断初始化是在硬件初始化函数中完成,
这也就是Zgpswh提到的现象:不调用TargetInit()内核运行异常,调用了却开不了UART0的中断。
解决的方法如下:
这在《arm嵌入式系统基础教程》的430页7.4.3节中论述的很清楚:
……关键在于把程序与芯片相关中断源挂接,使芯片在产生相应的中断后会调用相应的处理程序。
这需要做两方面事情:
1. 增加汇编接口的支持。……
2. 初始化向量中断控制器。…… |
|