FREERTOS笔记(二) 中断及常用任务api

本文详细介绍了FreeRTOS中断机制,包括中断优先级设置、中断安全API使用,以及如何通过API获取任务信息。此外,涵盖了vTaskDelay与vTaskDelayUntil的区别,以及常用Freertos API的应用。
摘要由CSDN通过智能技术生成

FREERTOS笔记(二) 中断及常用任务api

一、freertos中断

关于中断freertos还是较为复杂的,主要还和m3/m4内核有关,这里主要讲关键一些的(用户有必要了解的),过于底层的就跳过。


//FreeRTOSConfig.h
/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions.  DO NOT CALL
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
PRIORITY THAN THIS! (higher priorities are lower numeric values. */
#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY	5
首先我们默认分组为组4HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
即中断我们的抢占优先级为0~15,不适用子优先级
设在上面我们定义的只为x,也就是FREERTOS能管理优先级在 x ~ 15 之间的的优先级,这里我们设置为5
也就是说FREERTOS不能管理优先级在0~4的中断,freertos打断不了0-4的中断
同时需要注意的有两点:
1.我们在0-4的中断里不能调用freertos的api了
2.我们可以在5-15的中断中调用以FromISR结尾的api,并且可以中断嵌套

/*********分割线********************************************/
验证:
首先设置串口接收中断优先级8,在5-15内,由freertos管理,串口接收中断内容为发送什么返回什么
某任务1s输出一次任务代码
while(1)
{
printf("iiii=%d\n",iiii);
iiii++;
vTaskDelay(1000);
if(iiii==10) {portDISABLE_INTERRUPTS(); HAL_Delay(5000);}
}
我们在程序运行到10s时关闭所有5-15中断,此时串口接收中断关闭,注意一定要用hal库的延时,如果用任务切换延 
时系统会默认开启中断,这样我们会在5s内串口接收中断关闭,发送数据也不会返回,5s时间一过,程序运行到
vTaskDelay时又会开启中断,发送数据又会有返回值了

二、freertos获取任务信息api调用

UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask );//获取当前任务优先级,传入参数为任务句柄
void vTaskPrioritySet( TaskHandle_t xTask,UBaseType_t uxNewPriority );//任务参数看名字就知道了,后面如非必要就不讲了
UBaseType_t uxTaskGetNumberOfTasks( void );//获取任务个数
taskYIELD(); //任务切换,是个宏定义
taskENTER_CRITICAL(); //进入临界区,宏定义,一般用于不能被打断的任务的时候,比如软件i2c啥的
taskEXIT_CRITICAL(); //退出临界区
taskENTER_CRITICAL_FROM_ISR(); //用于中断中
taskEXIT_CRITICAL_FROM_ISR(); //用于中断中
vTaskStartScheduler(); //开启任务调度
vTaskEndScheduler(); //关闭任务调度!!!stm32用不了的!!!

三、freertos延时函数

1 vTaskDelay(ms);

相对延时函数,说延时多少就延时多少,不会随着你其它代码运算量改变而自适应运算周期

2 vTaskDelayUntil(ms);

绝对延时函数,延时时间是会自动改变的,会把你的其它代码运算时间算进去,用于绝对周期延时,例如PID100hz控制

四、其它freertos常用api

pdMS_TO_TICKS() //把ms转换成节拍数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值