关于单片机的一些容易被忽视问题

本文讲述了单片机编程中关于变量管理、内存区域(SRAM、ROM、EEPROM、FLASH)的理解和使用,以及程序跑飞的原因分析,包括全局变量、中断处理和堆栈管理的要点,旨在帮助开发者避免常见问题。
摘要由CSDN通过智能技术生成

 最近一直在单片机项目上打转,也碰到了很多稀奇古怪的问题,在这里做个记录。

01

变量

很多刚接触单片机嵌入式编程没有太多程序风格可言的程序员来说,变量的滥用以及命名的随意,导致在后期代码实际跑起来出现问题的时候,都不知道问题出在哪里,听到最多的回答就是"刚刚还是好好的,突然之间就卡死了"。

1、变量的命名

说实话每个人都有自己对变量以及函数名的命名习惯,但是个人认为名称这个东西应该是给人所见即所得的感觉,就是我看到名称就知道这个是干什么的,比如我要定义一个记录错误次数的变量errorCnt,可以使用驼峰式的书写方法,单驼峰或者双驼峰都可以。

2、变量的范围

单片机中常见的变量有全局变量、局部变量、静态局部变量、静态全局变量、易变变量。

全局变量:在整个工程文件内都有效;“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效。由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值, 就能影响到其他函数中全局变量的值。

静态全局变量:只在定义它的文件内有效,效果和全局变量一样,不过就在本文件内部;

静态局部变量:只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;静态局部变量的生存期虽然为整个工程,但是其作用仍与局部变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。    

局部变量:在定义它的函数内有效,但是函数返回后失效。“在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有效。

注意:全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知。

静态局部变量与全局变量最明显的区别就在于:全局变量在其定义后所有函数都能用,但是静态局部变量只能在一个函数里面用。

还有一个比较重要的是如果要在其他文件中引用另外文件的全局变量,需要用extern先对变量进行声明,声明的时候不要赋初值

不要初始化静态和全局变量为0(或NULL),让编译器来做

volatile变量:一个定义为volatile的变量是说这变量可能会被意想不到地改变&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值