TI官方代码中的任务状态机
2017-04-27 17:49
120 查看
TI官方例程代码中的任务状态机用于处理各种不同的非环路控制任务,这种状态机编程对于多任务管理比较有用
然后在main函数里的while循环中写下如下代码:
在main函数之外有:
任务A:
任务B和C的细分也类似于A,同上
// Timing sync for background loops // Timer period definitions found in PeripheralHeaderIncludes.h CpuTimer0Regs.PRD.all = mSec1; // A tasks,200000,1ms,CPU frequency=200MHz CpuTimer1Regs.PRD.all = mSec10; // B tasks,2000000,10ms CpuTimer2Regs.PRD.all = mSec100; // C tasks,20000000,100ms // Tasks State-machine init Alpha_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-ta 4000 sks if(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-tasks if(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-tasks if(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 A2 A_Task_Ptr = &A2; } void A2(void) { do something //the next time CpuTimer0 'counter' reaches Period value go to A3 A_Task_Ptr = &A3; } void A3(void) { do something //the next time CpuTimer0 'counter' reaches Period value go to A4 A_Task_Ptr = &A4; } void A4(void) { do nothing //the next time CpuTimer0 'counter' reaches Period value go to A1 A_Task_Ptr = &A1; }
任务B和C的细分也类似于A,同上
相关文章推荐
- 泛泰A860 官方振动源码(TI drv2665驱动芯片)(非之前的tspdrv代码)
- 发一份微软官方的代码注释示例
- MM官方的CFMX代码规范和Machii开发指南更新
- dedecms模板标签代码官方参考
- .NET 开发者必备 - 微软官方代码示例下载
- discuz官方论坛给论坛添加“日期”“添加主页到收藏夹”“把此页设为首页”的代码
- .net中用代码添加服务器上的计划任务
- dedecms模板标签代码官方参考
- 架构师任务--制定代码规范(Standard of Coding Standards) [转]
- SDK中的任务跟踪代码简单注释(续)
- 把一个asp页面代码改成存储过程实现(第一天上班的任务)
- 补充部分官方文档里没有的Client Library以及代码提示Schema更新(二)
- 补充部分官方文档里没有的Client Library以及代码提示Schema更新(三)
- TGE 官方好消息:获奖TGE网络游戏“Minions of Mirth”将于近期对外出售整套代码
- 补充部分官方文档里没有的Client Library以及代码提示Schema更新(二)
- (2)jBPM websale代码学习: home.jsp(显示任务列表)
- 状态机学习及对一段 java 代码的改写
- 补充部分官方文档里没有的Client Library以及代码提示Schema更新(一)
- 架构师任务--制定代码规范(Standard of Coding Standards)
- Lucene2.1 的官方示例代码