学习RTOS,把FreeRTOS内核写出来。学会任务如何定义,系统如何调度,底层汇编及多任务优先级的实现,这些是操作系统最深层次的知识。
1 新建工程。在system_ARMCM3.c中可以看到,晶振被定义为5MHz,系统时钟定义为5*XTAL = 25MHz。而在有的MDK生成的文件中,XTAL =50M Hz,系统时钟定义为 XTAL / 2 = 25MHz,效果都一样。所以,在MDK中,要将时钟频率设置为25M。
#include "ARMCM3.h"
/*----------------------------------------------------------------------------
Define clocks
*----------------------------------------------------------------------------*/
#define XTAL ( 5000000UL) /* Oscillator frequency */ /* 5M Hz */
#define SYSTEM_CLOCK (5U * XTAL) /* 5M * 5 = 25M Hz */
2 裸机系统,常分为轮询系统和前后台系统。
轮询系统框架:
前后台系统框架:
多任务系统的框图: