stm32f105vc移植FreeRTOS小型操作系统
扫描二维码
随时随地手机看文章
一、建立必要的stm32开发工程
1、FreeRTOS文件夹下存放的是整个FreeRTOS系统的 source文件夹。
FreeRTOS已经存放在云盘了。也可以通过官网下载。
二、添加相应的文件
1、list.c queue.c task.c位于source根目录下;
2、Port.c和portmacro.c是硬件接口层,位于FreeRTOSSourceportableRVDSARM_CM3文件夹下;
3、heap4.c为内存管理文件,位于FreeRTOS/Source/portable/MemMang下;
三、添加头文件路径
1、...FreeRTOSSourceportableRVDSARM_CM3
2、…FreeRTOSSourceinclude
3、…FreeRTOSSource
四、编写FreeRTOSConfig.h文件
从FreeRTOS自带的Demo文件夹下拷贝一份FreeRTOSConfig文件,并将该文件添加到工程中去。
此时,如果不是自己编写的代码出错,应该可以全部编译通过。
五、挂接中断
在Cortex-M3硬件下,FreeRTOS使用SysTick作为系统节拍时钟,使用SVC和PendSVC进行上下文切换。异常中断服务代码位于port.c文件中,FreeRTOS的作者已经为各种架构的CPU写好了这些代码,可以直接拿来用,需要用户做的,仅仅是将这些异常中断入口地址挂接到启动代码中。
在startup.s中,使用IMPORT关键字声明要挂接的异常中断服务函数名,然后将:
DCD SVC_Handler 换成: DCD vPortSVCHandler
DCD PendSV_Handler 换成: DCD xPortPendSVHandler
DCD SysTick_Handler 换成: DCD xPortSysTickHandler
六、设置节拍时钟
这里我们使用SysTick定时器作为系统的节拍时钟,设定每隔10ms产生一次节拍中断。由于FreeRTOS对移植做了非常多的工作,以至于我们只需要在FreeRTOSConfig.h中配置好以下两个宏定义即可:
configCPU_CLOCK_HZ ()
configTICK_RATE_HZ ((portTickType)100)
第一个宏定义CPU系统时钟,也就是CPU执行时的频率。第二个宏定义FreeRTOS的时间片频率,这里定义为100,表明RTOS一秒钟可以切换100次任务,也就是每个时间片为10ms。
在prot.c中,函数vPortSetupTimerInterrupt()设置节拍时钟。该函数根据上面的两个宏定义的参数,计算SysTick定时器的重装载数值寄存器,然后设置SysTick定时器的控制及状态寄存器,设置如下:使用内核时钟源、使能中断、使能SysTick定时器。另外,函数vPortSetupTimerInterrupt()由函数vTaskStartScheduler()调用,这个函数用于启动调度器。
七、配置其他宏
八、编写程序
九、代码下载
http://pan.baidu.com/disk/home?fr=ibaidu&errno=0&errmsg=Auth Login Sucess&&bduss=&ssnerror=0#list/path=/&vmode=list