欢迎光临散文网 会员登陆 & 注册

嵌入式软件开发的基础知识(1)一些定义性质的东西

2022-07-03 13:42 作者:云汉含星  | 我要投稿

宏定义 (#define)

    宏就是一种替换,在编译阶段会将使用的宏所有进行相应的替换。当然宏也有条件判断,宏函数这些的操作。这些函数运算和替换也都是完成在编译时。

内联函数的作用( inline)

    内联函数在编译阶段就已经进行了替换,运行时不需要函数的调用。这非常适合某一个小的,且需要频繁调用的模块。可能对于小模块来说,一次调用,出栈入栈的时间开销,已经和函数运行耗时同一个量级了。

静态变量的作用(static)

    静态变量static只会在第一次调用函数的时候初始化一次。在内存中是指定了一个地址的。下一次调用就不会重新建立一个零时的变量。
    静态变量也可以更好的限定变量或者函数的使用范围,在A函数内的静态变量,只能在A函数中使用,其他地方不能使用。静态函数和变量禁止extern出去。这在一定程度上可以减少程序之间的耦合。

为什么找不到函数的定义

    刚入手一份代码时,可能会遇到某些函数只有声明和使用,但是找不到定义。说明这个函数已经被封装到了OBJ里面。这种函数暂时是不用管的,等需要了解这部分的代码的时候,前辈自然会给你看这部分的代码。

遇到没有初始化,就直接使用的变量

    我们的硬件在启动的时候,对RAM做一次清零(我猜测应该是要求掉电,所以被迫清零了)。所以这些变量都是可以声明后直接拿来使用。但是这是一种非常不好的习惯。声明的变量不管是啥,最好都要初始化一下。

善用结构体和联合体存储数据(struct,union)

    将某个功能的相关参数,都集中起来,定义成结构体struct。然后在外面定义为联合体union。因为联合体的内存是共享的,一般来说,union会定义一个all和定义一个bit。一个根据索引访问数据,一个可以根据变量名直接访问一个bit。这个玩意是可以嵌套的。所以用一个uint16表示一个变量,和一个uint16表示16个bit(16个状态)联合起来状态量。都是可以的。

联合体体寻找数据的索引(union,index)

    因为联合体的内存是连续的,而且可以定义每一个字节,都可以有自己的变量名。所以直接用变量的地址,减去联合体的首地址。就可以得到偏移地址,也就是索引(index)。

PS:本人是机械专业的应届毕业生,目前从事嵌入式软件开发(萌新一个)。所以可能对别人来说很简单的问题,我可能从来没有遇到过。在学校里面写的代码几乎不会考虑到这部分的东西。

此文章仅记录自己工作过程的遇到的问题

嵌入式软件开发的基础知识(1)一些定义性质的东西的评论 (共 条)

分享到微博请遵守国家法律