提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
今天放纵了一下自己,打了几局CSGO,所以今天只学习了我之前学习的创建任务,删除任务等其他API外的一些API
一、API介绍?
下面是我要介绍的本篇的API,我主要参考的是正点原子FreeRTOS开发文档第十一章内容。
二、API具体介绍
1.UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask );
1.1 功能:查询某个任务的优先级
1.2 源码分析:
#if ( INCLUDE_uxTaskPriorityGet == 1 )
UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask )
{
TCB_t const * pxTCB;
UBaseType_t uxReturn;
taskENTER_CRITICAL();
{
/* If null is passed in here then it is the priority of the task
* that called uxTaskPriorityGet() that is being queried. */
pxTCB = prvGetTCBFromHandle( xTask );
uxReturn = pxTCB->uxPriority;
}
taskEXIT_CRITICAL();
return uxReturn;
}
#endif /* INCLUDE_uxTaskPriorityGet */
以上我们可以看出使用uxTaskPriorityGet时必须先打开INCLUDE_uxTaskPriorityGet的宏
然后他是带一个UBaseType_t的类型的返回值的函数由下面定义可以看出他是无符号长整形数据这样我们打印他可以用%d作为占位符。
其次他的形参是任务句柄。
typedef unsigned long UBaseType_t;
1.3 使用方法(放到一个任务中实现的)
xReturn=xTaskCreate(Task1Function,"Task1",128,NULL,2,&HandlerTask1);//任务一
void Task1Function( void * param){
UBaseType_t TaskPriority;
TaskPriority=uxTaskPriorityGet(HandlerTask1);//获取任务一的优先级
for(;;){
printf("Priority->%d\r\n",TaskPriority);
vTaskDelay(30);
}
}
打印结果:
2.void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority );
2.1 功能:设置某任务的优先级
2.2 使用声明
/******************实现是必须打开下面INCLUDE_vTaskPrioritySet的宏***************************/
#if ( INCLUDE_vTaskPrioritySet == 1 )
/*
然后下面的vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority )带两个形参,第一个是我们要修改的任务句柄、第二个是我们需要修改的优先级。
*/
void vTaskPrioritySet( TaskHandle_t xTask, UBaseType_t uxNewPriority ){
......
}
#endif
2.3 使用方法(放到一个任务中实现的)
xReturn=xTaskCreate(Task1Function,"Task1",128,NULL,2,&HandlerTask1);//任务一
void Task1Function( void * param){
UBaseType_t TaskPriority;
vTaskPrioritySet(HandlerTask1,3);//修改任务一的优先级
TaskPriority=uxTaskPriorityGet(HandlerTask1);
for(;;){
printf("Priority->%d\r\n",TaskPriority);
vTaskDelay(30);
}
}
打印结果:
这里的API有点多,我就不一一说明了,有兴趣的取看正点原子的FreeRTOS文档,第十一章
。。。。
总结
今天主要看了一下freeRTOS其他的API实现和功能
不飞则已、一飞冲天,不鸣则已,一鸣惊人。