本帖最后由 holts 于 2018-5-12 14:00 编辑
标志多,还不能改 ? 每个单片机的场景不同, 标志要用到才定义, 越少越好,多了程序的可读性就差了。
举个例子来说,假设一个客厅有两个门,每个门旁都有个开关,控制同一个灯, 用户进门时按下开关,灯亮, 当用户从另一个门走出去时按下开关,灯灭, 如果用单片机来处理,我会定义几个用得到的标志。
定义开关A和B
sbit KA = P0^0
sbit KB = P0^1
定义电灯
sbit Light = P1^0
定义一个电灯互斥锁标志
SEM LightMutex ;
简简单单,永远都不要定义用不到的多余标志。
再定义两个涵数来处理它们
检查开关A和B有按下就发信号
unsigned char SwitchK(){
_SS
while(1){
if (GPIO_ReadInputPin(GPIOT0,KA&KB))
SendSem(LightFlag);
}
_EE
}
收到信号就控制灯取反(原来灯是开的就关,原来灯是关的就开)
unsigned char Light(){
_SS
while(1){
WaitSem(LightFlag);
Light=!Light;
}
_EE
主程序看起来像这样
void main(void)
{
System_Init();
Time_Init();
InitTasks();
while(1)
{
RunTaskA(SwitchK, Task0_ID);
RunTaskA(Light, Task1_ID);
}
}
这就是引入操作系统的好处,我们可以优雅的写程序, 程序的可读性,重用性,可移植性和质量都有大弧度的提升,这些对于软件工程项目的标准化生产和质量控制都是非常非常重要的,这也是我一在强调用操作系统的出发点。
很多人都喜欢裸奔,为了一点点的性能或空间的提升,用尽各种奇云技巧,实际上得不尝失,必境大部份程序员还都是凡人, 再说单打独斗的年代早就过时了,现在讲究的都是团队作战。
|