多任务开发时,怎么管理任务的调度
时间片,抢占方式,但是有些任务会长耗时;
1,首先长耗时的任务,可能需要分割成多个短一些的任务
2,耗时长一点的任务,可以增加以下时间片时间;
3,对于低优先级,运动次数不多的任务,可以增加他的休眠时间,给出更多的更多的时间片出来
4,对于响应比较频繁而且快小的任务,可以尝试使用中断方式
5,对于长耗时的任务,优化算法和数据结构,减少对内存的使用和计算量,可以提高系统效率
6,实时监控任务的运行状态和响应时间,根据实际情况动态的调整任务的优先级和时间片 任务查看FreeRTOS+Trace:实时任务跟踪 ++ xTaskGetInfo等
1.API相关函数介绍
1)UBaseType_t uxTaskPriorityGet( const TaskHandle_t xTask )
功能:获得任务优先级 使用该函数需将宏 INCLUDE_uxTaskPriorityGet 置 1
形参:任务句柄,NULL代表任务自身
返回值:任务优先级数值
2)void vTaskPrioritySet( TaskHandle_t xTask , UBaseType_t uxNewPriority )
功能:改变某个任务的任务优先级,使用该函数需将宏 INCLUDE_vTaskPrioritySet 为 1
形参:
参数1:任务句柄,NULL代表任务自身
参数2:需要设置的任务优先级
3)UBaseType_t uxTaskGetNumberOfTasks( void )
功能:此函数用于获取系统中任务的任务数量
返回值:系统中任务的数量
4)UBaseType_t uxTaskGetSystemState(
TaskStatus_t * const pxTaskStatusArray,
const UBaseType_t uxArraySize,
configRUN_TIME_COUNTER_TYPE * const pulTotalRunTime
)
功能: 此函数用于获取系统中所有任务的任务状态信息,使用该函数需将宏 configUSE_TRACE_FACILITY 置 1
形参:
形参1:指向TaskStatus_t 结构体数组首地址
形参2:接收信息的数组大小
形参3:系统总运行时间,为NULL 则省略总运行时间值
返回值:获取信息的任务数量
typedef struct xTASK_STATUS
{
TaskHandle_t xHandle; /* 任务句柄 /
const char * pcTaskName; / 任务名 /
UBaseType_t xTaskNumber; / 任务编号 /
eTaskState e CurrentState; / 任务状态 /
UBaseType_t uxCurrentPriority; / 任务优先级 /
UBaseType_t uxBasePriority; / 任务原始优先级*/
configRUN_TIME_COUNTER_TYPE ulRunTimeCounter; /* 任务运行时间*/
StackType_t * pxStackBase; /* 任务栈基地址 /
configSTACK_DEPTH_TYPE usStackHighWaterMark; / 任务栈历史剩余最小值 */
} TaskStatus_t;
5)void vTaskGetInfo( TaskHandle_t xTask,
TaskStatus_t * pxTaskStatus,
BaseType_t xGetFreeStackSpace,
eTaskState eState )
功能:此函数用于获取指定的单个任务的状态信息,使用该函数需将宏 configUSE_TRACE_FACILITY 置 1
形参:
形参1:指定获取信息的任务的句柄
形参2:接收任务信息的变量
形参3:任务栈历史剩余最小值,
当为“pdFALSE” 则跳过这个步骤,
当为“pdTRUE”则检查历史剩余最小堆栈
形参4:任务状态,可直接赋值,如想获取代入“eInvalid”
typedef enum
{
eRunning = 0, /* 运行态 /
eReady / 就绪态 /
eBlocked, / 阻塞态 /
eSuspended, / 挂起态 /
eDeleted, / 任务被删除 /
eInvalid / 无效 */
} eTaskState;
6)TaskHandle_t xTaskGetCurrentTaskHandle( void )
功能:此函数用于获取当前任务的任务句柄, 使用该函数需将宏 INCLUDE_xTaskGetCurrentTaskHandle 置 1
形参:当前任务的任务句柄
7)TaskHandle_t xTaskGetHandle(const char * pcNameToQuery)
功能:此函数用于通过任务名获取任务句柄 , 使用该函数需将宏 INCLUDE_xTaskGetHandle 置 1
形参:任务名
返回值:任务句柄
8)UBaseType_t uxTaskGetStackHighWaterMark( TaskHandle_t xTask )
功能:此函数用于获取指定任务的任务栈历史最小剩余堆栈;使用该函数需将宏 INCLUDE_uxTaskGetStackHighWaterMark 置 1
形参:任务名
返回值:任务栈的历史剩余最小值
9)eTaskState eTaskGetState(TaskHandle_t xTask)
功能:此函数用于查询某个任务的运行状态,使用此函数需将宏 INCLUDE_eTaskGetState 置1
形参:待获取状态任务的任务句柄
返回值: 任务状态
void vTaskList(char * pcWriteBuffer)
功能:此函数用于以“表格”的形式获取系统中任务的信息 ;
使用此函数需将宏 configUSE_TRACE_FACILITY 和configUSE_STATS_FORMATTING_FUNCTIONS 置1
Name : 创建任务的时候给任务分配的名字。
State : 任务的壮态信息, B 是阻塞态, R 是就绪态, S 是挂起态, D 是删除态
Priority :任务优先级。
Stack : 任务堆栈的“高水位线”,就是堆栈历史最小剩余大小。
Num : 任务编号,这个编号是唯一的,当多个任务使用同一个任务名的时候可以通过此编号来做区
原文链接:https://blog.csdn.net/m0_73502349/article/details/135227734