完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.顺序执行 /************************************************************************************** * FunctionName : main() * Description : 主函数 * EntryParameter : None * ReturnValue : None **************************************************************************************/ int main(void) { uint8 keyValue; InitSys(); // 初始化 while (1) { TaskDisplayClock(); keyValue = TaskKeySan(); switch (keyValue) { case x: TaskDispStatus(); break; ... default: break; } } } 2.时间片轮寻: 2.0 一个定时器的复用: 【中断过于频繁效率就低,中断太长,实时性差】——设置合适的定时器中断时间
#define TASK_NUM (3) // 这里定义的任务数为3,表示有三个任务会使用此定时器定时。 uint16 TaskCount[TASK_NUM] ; // 这里为三个任务定义三个变量来存放定时值 uint8 TaskMark[TASK_NUM];// 同样对应三个标志位,为0表示时间没到,为1表示定时时间到。 /************************************************************************************** * FunctionName : TimerInterrupt() * Description : 定时中断服务函数 * EntryParameter : None * ReturnValue : None **************************************************************************************/ void TimerInterrupt(void) { uint8 i; for (i=0; i if (TaskCount) { TaskCount--; if (TaskCount == 0) { TaskMark = 0x01; } } } } 定时中断服务函数中:对任务逐个判断 定时计数到了没有 & 置标志为1 & 定时计数初值重置 2.1 时间片轮询架构: 两个函数+一个结构体======》时间片轮询架构1// 任务结构typedef struct _TASK_COMPONENTS{ uint8 Run; // 程序运行标记:0-不运行,1运行 uint8 Timer; // 计时器 uint8 ItvTime; // 任务运行间隔时间【AKA计时器初始值值】 void (*TaskHook)(void); // 要运行的任务函数} TASK_COMPONENTS; // 任务定义/*************************************************************************************** FunctionName : TaskRemarks()* Description : 任务标志处理* EntryParameter : None* ReturnValue : None* attention : ***在定时器中断中调用此函数即可*****************************************************************************************/void TaskRemarks(void){ uint8 i; for (i=0; i 2.2.1定义 任务结构体 // 任务结构typedef struct _TASK_COMPONENTS{ uint8 Run; // 程序运行标记:0-不运行,1运行 uint8 Timer; // 计时器 uint8 ItvTime; // 任务运行间隔时间【AKA计时器初始值值】 void (*TaskHook)(void); // 要运行的任务函数} TASK_COMPONENTS; // 别名123456782.2.2初始化 任务结构体 static TASK_COMPONENTS TaskComps[] = { {0, 60, 60, TaskDisplayClock}, // 显示时钟 {0, 20, 20, TaskKeySan}, // 按键扫描 {0, 30, 30, TaskDispStatus}, // 显示工作状态 // 这里添加你的任务。。。。};1234567892.2.3定义 任务清单&任务数目 枚举类型 // 任务清单typedef enum _TASK_LIST{ TAST_DISP_CLOCK, // 显示时钟 TAST_KEY_SAN, // 按键扫描 TASK_DISP_WS, // 工作状态显示 // 这里添加你的任务。。。。 TASKS_MAX // 总的可供分配的定时任务数目} TASK_LIST;1234567892.2.4编写 定时器中断函数&任务处理函数 /*************************************************************************************** FunctionName : TaskRemarks()* Description : 任务标志处理* EntryParameter : None* ReturnValue : None* attention : ***在定时器中断中调用此函数即可*****************************************************************************************/void TaskRemarks(void){ uint8 i; for (i=0; i
/*************************************************************************************** FunctionName : TaskDisplayClock()* Description : 显示任务* EntryParameter : None* ReturnValue : None**************************************************************************************/void TaskDisplayClock(void){}/*************************************************************************************** FunctionName : TaskKeySan()* Description : 扫描任务* EntryParameter : None* ReturnValue : None**************************************************************************************/void TaskKeySan(void){}/*************************************************************************************** FunctionName : TaskDispStatus()* Description : 工作状态显示* EntryParameter : None* ReturnValue : None**************************************************************************************/void TaskDispStatus(void){}// 这里添加其他任务。。。。。。。。。2.3 注意点 任务与任务间数据传递时,数据传递要采用全局变量 3.操作系统: FreeRTOS、鸿蒙os~~~【略】 >>>这是一篇学习笔记,感谢博主:@Good__life |
|
|
|
只有小组成员才能发言,加入小组>>
2579 浏览 0 评论
776浏览 1评论
536浏览 0评论
282浏览 0评论
482浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-7 09:09 , Processed in 1.053665 second(s), Total 50, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号