71
520
2476
初级工程师
使用特权
int main(void) { //系统初始化 while(1) { //do something switch(State) { case 状态1: //do something break; case 状态2: //do something break; · · · case 状态灯: ED_TOGGLE(); //LED闪烁 break; } } }
void StatusLight_Task(void *pvParameters) { static TickType_t xLastWakeTime; //初始化 xLastWakeTime = xTaskGetTickCount(); for(;;) { //do something LED_TOGGLE(); //LED闪烁 vTaskDelayUntil(&xLastWakeTime, 500); } }
LED_ON(); vTaskDelay(TimesON); LED_OFF(); vTaskDelay(TimesOFF);
typedef struct { uint8_t Mode; //模式 uint8_t Status; //当前状态 uint16_t OffTimes; //灭时间 uint16_t OnTimes; //亮时间(ms) uint16_t Counter; //计数(计时) void (*OffFun)(void); //灭函数接口 void (*OnFun)(void); //亮函数接口 }SL_TypeDef; /* 状态灯 */
void StatusLight_Task(void *pvParameters) { static TickType_t xLastWakeTime; xLastWakeTime = xTaskGetTickCount(); for(;;) { SL_Scan(&sSLG_Structure); //红灯 SL_Scan(&sSLY_Structure); //黄灯 SL_Scan(&sSLR_Structure); //绿灯 vTaskDelayUntil(&xLastWakeTime, SL_TASK_PERIOD); } }
static void SL_Scan(SL_TypeDef *SL_Struct) { /* 常灭模式 */ if(SL_MODE_OFF == SL_Struct->Mode) { SL_Struct->Status = SL_STATUS_OFF; //状态置为"灭" SL_Struct->OffFun(); //灭灯 } /* 常亮模式 */ else if(SL_MODE_ON == SL_Struct->Mode) { SL_Struct->Status = SL_STATUS_ON; //状态置为"亮" SL_Struct->OnFun(); //亮灯 } /* 闪烁模式 */ else if(SL_MODE_FLICKER == SL_Struct->Mode) { /* 在灭状态 */ if(SL_STATUS_OFF == SL_Struct->Status) { SL_Struct->Counter++; if(SL_Struct->Counter >= SL_Struct->OffTimes) { SL_Struct->Counter = 0; SL_Struct->OnFun(); //亮灯 SL_Struct->Status = SL_STATUS_ON; //状态置为"亮" } } /* 在亮状态 */ else if(SL_STATUS_ON == SL_Struct->Status) { SL_Struct->Counter++; if(SL_Struct->Counter >= SL_Struct->OnTimes) { SL_Struct->Counter = 0; SL_Struct->OffFun(); //灭灯 SL_Struct->Status = SL_STATUS_OFF; //状态置为"灭" } } else { SL_Struct->Status = SL_STATUS_OFF; //状态置为"灭" } } /* 未知模式 */ else { SL_Struct->Status = SL_STATUS_OFF; //状态置为"灭" SL_Struct->OffFun(); //灭灯 } }
91
1722
5454
高级工程师
231
1538
4846
中级工程师
发表回复 本版积分规则 回帖后跳转到最后一页
1
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号