嵌入式开发常用技巧及C/C++知识
引言
- 引言
- 查询程序占据的内存大
- static 静态变量
- 介绍
- static在函数中的用法
- ‘##’连接符
- 断言函数
- 宏定义与条件变量
- #if...#else...#endif
- 选择是否使用串口调试
- memcpy函数
- void 指针
- 指针大小
- 字符串小写转大写
- 字符串大写转小写
- 字符串命令处理
- 将某几位清0,并保留其他位的状态
- strstr()
- atoi()
- rename()
- 其他
- 后续
我们在日常的嵌入式开发中,经常会遇到各种C/C++的使用问题,并且C/C++纯软件的常用开发技巧有些嵌入式并不常用,而嵌入式开发中使用到的C/C++知识与技巧有些也非常特别,这里我们来具体介绍一下嵌入式开发常用技巧及C/C++知识(未完待续)。
查询程序占据的内存大双击你的工程文件名
打开.map文件,拉到最下面就可以看到你的程序会占据开发板的多少内存。
静态全局变量:在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。 静态全局变量有以下特点:
- 该变量在全局数据区分配内存
- 未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0)
- 静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的 静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量。对于一个完整的程序,在内存中的分布情况:
一般程序把新产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。 定义全局变量就可以实现变量在文件中的共享,但定义静态全局变量还有以下好处:
- 静态全局变量不能被其它文件所用
- 其它文件中可以定义相同名字的变量,不会发生冲突
当函数中定义一个static变量,除了第一次调用这个函数会定义这个变量以外,其他情况下,均不会重新定义了。下面举个例子,对比静态变量和常规变量在函数调用中的区别。
void staticFun(void)
{
static uint8_t data = 0;
data++;
printf("static function data = %d\r\n",data);
}
void NostaticFun(void)
{
uint8_t data = 0;
data++;
printf("no static function data = %d\r\n",data);
}
int main()
{
staticFun();
staticFun();
staticFun();
NostaticFun();
NostaticFun();
NostaticFun();
return 0;
}
执行此程序,主函数会先调用三次staticFun();函数,再调用三次NostaticFun();函数。最后的输出结果为:
1
2
3
1
1
1
因为每次NostaticFun中的data 都会被重新定义,而staticFun中的data不会重复定义。
‘##’连接符##用来连接前后两个参数,把它们变成一个字符串。 例子如下:
#define main(x,y) x##y
int xy=1;
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?