主要从“ucos任务”的“三要素”进行介绍,并在“对应部分”注有“注意事项”,具体如下:
i)、“任务优先级”:本次设计,暂定的“任务”总共有7个:“起始任务”、“LED1任务”、“LED2任务”、“蓝牙串口1任务”、“ADC采集任”、“液晶触摸屏任务”;“优先级”分配如下:
#define TASK_STARTUP_TASK_PRIO 25
#define TASK_LED1_TASK_PRIO 6
#define TASK_LED2_TASK_PRIO 7
#define TASK_RELAY_TASK_PRIO 10
#define TASK_USART1_TASK_PRIO 11
#define TASK_ADC_AIN_TASK_PRIO 12
#define TASK_HMI_SCREEN_TASK_PRIO 13
注意:此处的“TASK_STARTUP_TASK_PRIO”(起始任务)的“优先级”设置为“25”,在“ucos”中,普遍将“起始任务”的“任务优先级”设置为“最低”,其作用仅为“创建系统有效任务”,且在“系统任务创建完成”后,会将“起始任务挂起”,在“系统代码”中,“起始任务”实际“只运行了1次”;
在此处的“ucos系统工程”中,“起始任务”对应“优先级”为“25”,则表示还可建立“25-1”个“系统任务”,“优先级”可从“0”开始,且“优先级越小,优先级越高”;在“ucos”中,“高优先级任务,可打断低优先级任务”;
ii)、“任务堆栈”:对“任务堆栈”而言,其“堆栈大小”需“根据实际情况而定”,在本次设计中,“普通任务”多设计为“80”,大部分“系统任务”,设置为“80”足以满足“任务需求”,代码如下:
#define TASK_STARTUP_TASK_STK_SIZE 80
#define TASK_LED1_TASK_STK_SIZE 80
#define TASK_LED2_TASK_STK_SIZE 80
#define TASK_RELAY_TASK_STK_SIZE 80
#define TASK_USART1_TASK_STK_SIZE 80
#define TASK_ADC_AIN_TASK_STK_SIZE 250
#define TASK_HMI_SCREEN_TASK_STK_SIZE 80
注意:此处的例外为“
TASK_ADC_AIN_TASK_STK_SIZE”,其“堆栈大小”设置为“250”,由于本次设计,预留的“ADC采集”共有“2路”,因此需在“不同的ADC通道间切换”,即“同时使用2路ADC”;
“调试”及“定位方法”:
首先,在“调试代码”时,起初将大小设置为“80”,但在运行时,均是“LED1”和“LED2”在“稳定运行5次”后,“ucos代码”即“停止运行”,使用“仿真调试”后,发现“系统代码”进入“硬件中断”,导致“系统假死”;
然后,尝试定位“问题”是否源自于“多通道ADC任务”:
尝试1:“多通道ADC任务”在“ucos工程”中“注释”后,再“下载运行”,“程序运行正常”;
尝试2:再将“多通道ADC任务”在“ucos工程”中“取消注释”后,再“下载运行”,“程序”再运行“数次”后进入“硬件中断”,即“假死”;
至此可得出结论:“ucos代码”进入“硬件中断”源自“多通道ADC任务代码”;
最后,仔细核查“优先级”、“任务堆栈”及“任务建立”3个方面后,发现“无逻辑错误”,但在“运行固定次数”后,系统才进入“硬件中断”,即“任务本身”在“程序之初”曾“稳定运行过”;至此可得出结论:“问题”极可能源自于“堆栈大小不够”,导致“数据溢出”、“任务卡死”;在将“任务堆栈大小”设置为“250”后,“系统可正常运行”(测试时间为“10min”);之后将“堆栈大小”再次改为“80”,“系统代码”在“运行数次”后,依旧进入“卡死状态”;“往复测试3次”后,“代码运行结果均一致”;至此可得出最终结论:“ucos代码”进入“硬件中断”,问题源自于“任务堆栈过小”导致“数据溢出”、“任务卡死”;
iii)、“任务建立”:对“任务建立”而言,只需注意“4点”:
首先,编写“代码”前,可尽量先:理清逻辑、绘制流程图并编写相关文档;便于后续“复查/添加功能”;
然后,需明确“各个任务”的“具体功能”,切忌“多个任务实现同一功能”,因为“将同一功能”分发至“多个任务函数中”,会“增加代码耦合性”,对“后期维护”、“后续升级”等造成“极大的困难”;
然后,“各个任务”需设置为“while(1)大循环模式”,此表示“任务”在“上电”后将“无休止的运行”,直至“触发特定条件”;
最后,“任务代码”需符合“通用代码规范”、“逻辑清晰”、“缩进有序”、“注释明确”,切忌“任意编写”、“随意定义变量”,至于“注释”方面,为“见仁见智”,但“合理的注释”可极大提高“代码可读性”;
“自制智能家居控制系统设计与实测”对应的“实测视频”前面已经发布,“硬件”已可“确定”,配套的“软件代码”也已测试完成,后续的“完善工作”需在“使用中完成”,预定“测试时间”为“2个月”;
至此,“自制智能家居控制系统设计与实测”已完成,对“Version 1.0版”的“硬件原理图”、“硬件PCB”、“软件工程代码”将会在“整理完成后”发布,供大家查阅;
Edit date:2018-01-09;
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!