开发环境:IAR4.20.1
硬件平台:MSP430F5438
主频:16MHz
FuncSch_V01_02.rar
功能:实现用户任务按照时间片调度运行。
说明:任务分为背景任务(主线程)和用户任务,当定义好时间片的大小和用
户任务的执行时刻后,随着时间指针的运行,到了运行时刻的用户任务
便开始执行,到了其挂起时刻便停止运行。在各任务的间隙执行背景任
务(主线程)。
原理:利用1ms中断服务程序的返回,进行任务切换。当需要切换任务时,将
当前任务的R4~R15压入其堆栈,并保存其栈顶地址;将欲切换任务的栈
顶地址赋给SP,然后从该任务的堆栈中单出R4~R15
*******************************************************************/
//--------------使用说明------------------------------------------
/*
不支持中断嵌套
1ms中断中执行调度,将调度代码放在中断服务程序的最后
任务初始化函数void InitFuncSch(void),放在开中断之后,进主循环之前
任务书写格式:
void name(void)
{
while(1)
{
//喂狗
}
}
必须是一个无限循环 每循环一次应当喂狗
定义任务按照以下步骤:
1.定义任务数量
2.定义任务堆栈大小
3.定义时间片的长度,单位ms
4.定义任务堆栈(一个数组)
5.填任务定义表FuncDef[][4],[0]表示任务堆栈大小 ,[1]表示任务堆栈首地址,
[2]表示任务启动时间点,[3]表示任务挂起时间点
6.将任务函数名,填到任务列表中
7.如需测试任务堆栈的使用最大量,开放 EN_TestStack 定义,各任务使用堆栈的最大值
放在数组SP_ByteMax[Num_FS]中,0~Num_FS-1 对应了 1~Num_FS任务
*/
************************************************************************************************
使用IAR4.20.1做了一个工程实例:
FunSch_V01_02Example-IAR420.rar
使用的MSP430F5438,晶震XT1使用32.678Mhz,XT2使用8MHz。
工程中写了2个很简单的任务,example01,example02,主循环(背景任务)空转只喂狗了。
在20ms的时间片中,example01运行3ms,example02 运行2ms,其他时间留给了时背景任务运行。
我要赚赏金打赏帖 |
|
|---|---|
| 28BYJ-48机械臂实现人脸跟随被打赏¥24元 | |
| 基于RK3506B的片温识读功能的实现被打赏¥25元 | |
| 【瑞萨RA8D1测评】基于FreeRTOS的lvgl移植教程被打赏¥29元 | |
| 电子价签墨水屏开发被打赏¥35元 | |
| 【Ozone】RTT 打印终端使用被打赏¥29元 | |
| BMS保护板绝缘检测功能-不平衡电桥技术绝缘电阻检测设计与实现被打赏¥34元 | |
| 给28BYJ-48三自由度机械臂加一个网页控制台被打赏¥32元 | |
| 用28BYJ-48电机从零搭一台三自由度机械臂被打赏¥33元 | |
| 【英飞凌开发经验】ModusToolbox配置EdgeTalk外设被打赏¥27元 | |
| 基于BQ76952PFBR的BMS保护板热插拔损坏的原因和处理措施被打赏¥32元 | |
我要赚赏金
