TI官方代码中的任务状态机
来源:互联网 发布:城市天际线mod软件 编辑:程序博客网 时间:2024/05/17 13:40
TI官方例程代码中的任务状态机用于处理各种不同的非环路控制任务,这种状态机编程对于多任务管理比较有用
// Timing sync for background loops// Timer period definitions found in PeripheralHeaderIncludes.hCpuTimer0Regs.PRD.all = mSec1;// A tasks,200000,1ms,CPU frequency=200MHzCpuTimer1Regs.PRD.all = mSec10;// B tasks,2000000,10msCpuTimer2Regs.PRD.all = mSec100;// C tasks,20000000,100ms// Tasks State-machine initAlpha_State_Ptr = &A0;
然后在main函数里的while循环中写下如下代码:
//--------------------------------- FRAMEWORK -------------------------------------for(;;) //infinite loop{// State machine entry & exit point//===========================================================(*Alpha_State_Ptr)();// jump to an Alpha state (A0,B0,...)//===========================================================}
在main函数之外有:
//--------------------------------- FRAMEWORK -------------------------------------void A0(void){// loop rate synchronizer for A-tasksif(CpuTimer0Regs.TCR.bit.TIF == 1){CpuTimer0Regs.TCR.bit.TIF = 1;// clear flag//-----------------------------------------------------------(*A_Task_Ptr)();// jump to an A Task (A1,A2,A3,...)//-----------------------------------------------------------}Alpha_State_Ptr = &B0;// Comment out to allow only A tasks}void B0(void){// loop rate synchronizer for B-tasksif(CpuTimer1Regs.TCR.bit.TIF == 1){CpuTimer1Regs.TCR.bit.TIF = 1;// clear flag//-----------------------------------------------------------(*B_Task_Ptr)();// jump to a B Task (B1,B2,B3,...)//-----------------------------------------------------------}Alpha_State_Ptr = &C0;// Allow C state tasks}void C0(void){// loop rate synchronizer for C-tasksif(CpuTimer2Regs.TCR.bit.TIF == 1){CpuTimer2Regs.TCR.bit.TIF = 1;// clear flag//-----------------------------------------------------------(*C_Task_Ptr)();// jump to a C Task (C1,C2,C3,...)//-----------------------------------------------------------}Alpha_State_Ptr = &A0;// Back to State A0}
任务A:
void A1(void){ do something//the next time CpuTimer0 'counter' reaches Period value go to A2A_Task_Ptr = &A2;}void A2(void){ do something//the next time CpuTimer0 'counter' reaches Period value go to A3A_Task_Ptr = &A3;}void A3(void){ do something//the next time CpuTimer0 'counter' reaches Period value go to A4A_Task_Ptr = &A4;}void A4(void){ do nothing//the next time CpuTimer0 'counter' reaches Period value go to A1A_Task_Ptr = &A1;}
任务B和C的细分也类似于A,同上
0 0
- TI官方代码中的任务状态机
- 泛泰A860 官方振动源码(TI drv2665驱动芯片)(非之前的tspdrv代码)
- 如何下载TI官方例程
- TI官方文档阅读体会
- libvma状态机代码阅读
- libvma状态机代码阅读
- 状态机FSM代码框架
- 状态机--C#代码实现
- 游戏中的状态机
- Android中的状态机 机制
- Android中的状态机 机制
- Android中的状态机 机制
- 游戏中的状态机
- 游戏中的状态机
- 游戏中的状态机
- unity中的状态机
- ReactJs中的状态机State
- Game中的状态机
- popwindow的简单实用
- 消息中间件RocketMQ的安装与部署
- HTTP multipart/form-data 请求协议分析
- js使用html2canvas实现屏幕截取
- MySQL字符集与排序规则
- TI官方代码中的任务状态机
- MongoDB journal与oplog解惑
- Linux删除文件或目录
- redis入门学习笔记
- 如何用C++调用命令行
- Android Studio 实用技巧总结
- 分布式消息队列RocketMQ部署与监控
- Linux操作系统
- 线程安全和可重入函数