【FreeRTOS】FreeRTOS_基于STM32的移植

整个FreeRTOS源码的文件组成架构在上一篇文章已经说过了,这里就不赘述,直接文字写步骤

一、大体流程

  1. 建立stm32的基本工程框架文档
  2. 讲源码(source)拷贝到该工程目录下,并删去(portable中)不必要的部分(本次只留下keil、Memmang和RVDS三个文档)
  3. 打开工程文件,添加FreeRTOS的文件(manage project处)添加freertos_core和freertos_port(名字自己随便起,但注意可维护性和可读性)
  4. 将文件source内第一级目录下除文件夹外的所有.c文件都添加到core文件目录下
  5. 将portable中heap_4.c(内存管理的)添加到port文件目录下
  6. 将RVDS中的CM3下的文件port.c(移植接口文件(汇编+c))文件加入到port文件目录下
  7. 指定头文件路径(魔术棒处),将include文件夹下都包含到,以及对应地RVDS的对应文件的port.c单独对应的.h文件所存放的文件夹
  8. 编译,检查是否有报错
  9. 参考Demo文件例程stm32芯片的例程去修改错.
  10. 适当注释掉stm32的中断函数文件的宏(如果定义有冲突的话)(例如:PendSV_Handler和SVC_Handler)
  11. Systick延时函数的改写

二、中断文件的修改

Systick是stm32选择的给freeRTOS的时钟方式
在 Systick_Handler要编写freeRTOs的相关代码

可在port.c中找到void vPortSetupTimerInterrupt( void )其已经对Systick的实现了功能
只需要再stm32f10x_it.c中的SysTick_Handler(void)中对其调用即可

#include"task.h"
#include"FreeRTOS.h"
extern void xPortSysTickHandler();
void SysTick_Handler(void)
{
	//判断系统是否运行
	if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
    {
        xPortSysTickHandler();	
    }
}

三、Systick文件的修改

FreeRTOS系统时钟由滴答定时器提供,所以要根据FreeRTOS的节拍来初始化滴答定时器,

configTICK_RATE_HZ这个宏定义就是RTOs的时钟节拍频率,可以自由设置,然后进行初始化

滴答定时器的时钟频率时AHB时钟的8分频,FreeRTOS将AHB作为时钟源

void SysTick_Init(u8 SYSCLK)
{
	u32 reload;
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);/
	fac_us=SystemCoreClock/1000000;				
	reload=SystemCoreClock/1000000;				
	reload*=1000000/configTICK_RATE_HZ;			
												
	fac_ms=1000/configTICK_RATE_HZ;				

	SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;   	
	SysTick->LOAD=reload; 							
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;   			   
}	

两个毫秒级延时的不同
一个涉及任务调度(调用系统级的延时),一个根据滴答定时器的节拍计算。

void delay_ms(u32 nms)
{	
	if(xTaskGetSchedulerState()!=taskSCHEDULER_NOT_STARTED)
	{		
		if(nms>=fac_ms)						//
		{ 
   			vTaskDelay(nms/fac_ms);	 		
		}
		nms%=fac_ms;						  
	}
	delay_us((u32)(nms*1000));				//
}


void delay_xms(u32 nms)
{
	u32 i;
	for(i=0;i<nms;i++) delay_us(1000);
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值