8.1 阅读本章所必备的知识
本章和下一章要讲解的内容和 Cortex-M 处理器的内核架构联系非常紧密!阅读本章必须先
对 Cortex-M 处理器的架构有一定的了解,在学习本章的时候一定要配合《权威指南》来学习,
推荐大家仔细阅读《权威指南》中的如下章节:
1、第 3 章 技术综述,通过阅读本章可以对 Cortex-M 处理器的架构有一个大体的了解。
2、第 4 章 架构,强烈建议仔细阅读本章内容,尤其是要理解其中讲解到的各个寄存器。
3、第 5 章 指令集,本章和下一章的内容会涉及到一些有关 ARM 的汇编指令,在阅读的
时遇到不懂的指令可以查阅《权威指南》的第 5 章中相关指令的讲解。
4、第 7 章 异常和中断,大概了解一下 。
5、第 8 章 深入了解异常处理,强烈建议仔细阅读!
6、第 10 章 OS 支持特性, 强烈建议仔细阅读!
《权威指南》中的其他章节大家依据个人爱好来阅读,由于《权威指南》讲解的内容非常
的“底层”,所以看起来可能会感觉晦涩难懂,如果看不懂的话不要着急,看不懂的地方就跳过,
先对 Cortex-M 的处理器有一个大概的了解就行了。笔者第一次看宋岩翻译的那本《ARM Cortex-
M3 权威指南》的时候就一点都没看懂,在后面的工作中因为工作需要才硬着头皮看的,不知道
看了多少遍,反正书已经翻烂了,现在看第三版的《权威指南》估计也就能看懂个 40%~50%吧。
8.2 调度器开启过程分析
在本节中会涉及到 ARM 的汇编指令,有关涉及到的 ARM 指令的详细使用情况请参考《权
威指南》的“第 5 章 指令集”。《权威指南》的这一章节对 Cortex-M3/M4 内核的所有指令做了
非常详细的接收,包括指令的含义、使用方法和参考案例等等。
8.2.1 任务调度器开启函数分析
前面的所有例程中我们都是在 main()函数中先创建一个开始任务 start_task,后面紧接着调
用函数 vTaskStartScheduler()。这个函数的功能就是开启任务调度器的,这个函数在文件 tasks.c
中有定义,缩减后的函数代码如下:
void vTaskStartScheduler( void )
{
BaseType_t xReturn;
xReturn = xTaskCreate( prvIdleTask, (1)
"IDLE", configMINIMAL_STACK_SIZE,
( void * ) NULL,
( tskIDLE_PRIORITY | portPRIVILEGE_BIT ),
&xIdleTaskHandle );
#if ( configUSE_TIMERS == 1 ) //使用软件定时器使能
{
if( xReturn == pdPASS )
{
xReturn = xTimerCreateTimerTask(); (2)
}