KEIL代码编程技巧(2)

以下代码都是以GD32F470ZIT6芯片代码举例,但是逻辑思路可以借鉴 

1、判断通信设备是否在线思路

在进行单片机编程时,经常会遇到单片机和其他设备通信,那我们如何判断设备是否在线?

typedef struct{
    int commCount;
    bool commOnlineFlag;
}STCommOnlineJudge;

STCommOnlineJudge usart1Comm;


void task1(void)
{
    
    if( ++usart1Comm.commCount > 50 )
    {
        usart1Comm.commOnlineFlag = 0;//如果在5S里面串口没有通信成功,则说明设备不在线
    }    
    delay_ms(100);
    
}


void task2(void)
{
    
    //进行通信
    if(通信成功,如CRC校验成功,自定义协议成功等)
    {
        usart1Comm.commCount = 0;//如果通信成功,则通信计数清0,开始重新计数
        usart1Comm.commOnlineFlag = 1;//如果通信成功,则将通信标志位置1
    }

    delay_ms(500);//每500ms读取一次数据
    
}

2、static的三个作用

(1)static修饰局部变量时,改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束,但是作用域不变,仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。

(2)static修饰全局变量时,这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

(3)static修饰函数,该函数只在本文件内被调用或访问,不能跨文件访问,其他文件中可以定义相同名字的函数,不会发生冲突。

3、常见变量存放区域

(1)static无论是全局变量还是局部变量都存储在全局/静态区域,在编译期就为其分配内存,在程序结束时释放。

(2)const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放,例如:val_c;const局部变量存储在栈中,代码块结束时释放。

(3)全局变量存储在全局/静态区域,在编译期为其分配内存,在程序结束时释放。

(4)局部变量存储在栈中,代码块结束时释放,

注:当全局变量和静态局部变量未赋初值时,系统自动置为0。

 

4、switch常用场景

//场景1,代码需要按照严格顺序执行
static int stepNum=0;
switch(stepNum)
{
    case 0:
        //步骤1
        stepNum=1;
        break;
    case 1:
        //步骤2
        stepNum=2;
        break;
    case 2:
        //步骤3
        stepNum=0;
        break;
}
//场景2,例如系统有很多状态,但是没有严格顺序

//首先将系统的状态使用枚举进行定义
typedef enum{
Init=0,
SelfCheck,
On,
Off
}SystemStatus;

static int num=0;
switch(num)
{
    case Init:
        //初始化动作
        break;
    case SelfCheck:
        //自检动作
        break;
    case On:
        //开机动作
        break;
    case Off:
        //关机动作
        break;
    default :
        break;
}

5、命名小技巧

(1)当存在一个事物有多个品牌时,先事物,在品牌

例如手机有vivo,oppo,xiaomi这三种类型,那么定义为 phone_vivo,phone oppo,phone_xiaomi

(2)PCS目标有功控制功率  PcsAcPowObject,由此定义我们可以看出 先定义有区分度或者重要的名词,不一定要按照中文顺序依次定义

(3)当给变量或者函数命名时,不需要有多高级,需要看到这个命名,你就能知道他的意思,并且不能思考,要做到看命名和读中文一样,如果你看变量的名字需要跳转定义或者思考,则说明变量名定义失败

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值