在写单片机程序的时候,一个程序有几个动作(操作,事件…),几个动作还有某种关系,或互斥,或按时间顺序等等。
本文应该算作程序设计一类,还是比较简单的,权当为梳理记录,不图讲到什么高深道理。
言归正传,设计程序的时候,一定要有分块的概念,大块包含小块,正如人类逻辑上的包含关系。比如一套广播体操分,几套动作,每一套动作分几Part简单的重复动作。那么我们应该认识到,这些简单的重复动作是不可再分割的,所以原则上,我们可以先把这些简单动作写成一个一个函数,至于后面的设计,可能需要合并这些函数,但是思维上把这些动作分割开是首要的。
【互斥动作】
比如机器的某个关节的几个动作是互斥的,下面以头部关节的转动为例,对互斥的动作进行设计:
#include <stdio.h>
#include <xxx.h>
bool HR_IF//头部转动动作执行或者不执行的开关标记
char HR_FLGS //bit7、6:表示头部转动的模式,参见Mode_HR成员;bit5~0表示头部转动次数
enum Mode_HR
{
VERTI,
HORI,
ALLDIRE,
};
HR_VERTI(){}//头部水平转动函数
HR_HORI(){}//头部竖直转动函数
HR_ALLDIRE(){}//头部全方向转动函数
void HeadRotate(bool HR_if, Mode_HR mod , int times )//参数:开关,方式、次数(0为无限次)
{
HR_IF = HR_if;
HR_FLGS| = mod << 6;//Mode_HR有效位只有两位,把它左移到HR_FLGS的高2位
HR_FLGS| = times & 0x3f;//HR_FLGSd bit5~0表示头部转动次数
}
int main()
{
machine_init();
while(1)
{
if(HR_if)
{
if(HR_FLGS&0xc0 == 0)//HR_FLGS的bit7、6:表示头部转动的模式,
HR_VERTI();