登录
|
注册会员
开启辅助访问
设为首页
收藏本站
扫一扫关注官方微信
论坛
BBS
M币充值
M currency prepaid phone
M币获取
附件中心
搜索
search
全新论坛MCU智学网上线,欢迎访问新论坛!稀缺资源、技术干货、参考设计、原厂资料尽在MCU智学网
MCU资讯论坛
»
论坛
›
单片机开发论坛
›
C语言论坛
›
单片机C语言编程的全局变量的使用
更新自动建库工具PCB Footprint Expert 2023.13 Pro / Library Expert 破解版
单片机C语言编程的全局变量的使用
[复制链接]
7143
3
ad***
管理员
发表于 2012-7-20 12:15:45
|
查看全部
|
阅读模式
本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要
登录
才可以下载或查看,没有帐号?
注册会员
x
工作也有些年头了,从一位技术新人成长到现在自诩小牛级别的人物,少不了要自己寻找资料阅读。
论坛
上、书店里、杂志上......要嘛是些菜鸟浅薄的自炫处女贴,要嘛是高屋建瓴云里来雾里去的概念文,好不容易遇到个实践型高手写的文章,却在渐入佳境之际嘎然而止。本是隔靴搔痒,看完后心中更是郁结不已。也罢,今日强装回大牛,献丑谈一谈
单片机
编程中全局变量问题吧。
单片机程序最易范的错误是全局变量到处飞,这个现象在早期写汇编转型过来的程序员以及初学者中常见,这帮家伙几乎把全局变量当作函数形参来用,多数的.h文档里面一堆的结构体定义和extern,这个模块里边赋值123,那个模块里边判断123分支决定做什么。每当看到这种程序,我总要戚眉变脸而后拍桌喝骂。我不否认全局变量的重要性,但我认为要谨慎地使用它,滥用全局变量会引申带来其它更为严重的结构性问题。诸位看官,且听我细细道来。
1 它会造成不必要的常量频繁使用,特别当这个常量没有用宏定义“正名”时,代码阅读起来将万分吃力。
2.它会导致软件分层的不合理,全局变量相当于一条快捷通道,它使得程序员模糊了“设备层”和“应用层”之间的边界。写出来的底层程序容易多情地关注起上层的应用。这在软件系统的初期或许功能调试进度一日千里,但到了后期往往bug一堆,处处“补丁”,雷区遍布。说是度日如年举步维艰,也不夸张的。
3.由于软件的分层不合理,到了后期维护,哪怕仅是增加修改删除小功能,往往要从上到下掘地三尺地修改,涉及大多数模块,而原有的代码注释却忘了更新修改,这个时候,交给后来维护者的系统会越来越像一个“泥潭”,注释的唯一作用就是为了使泥潭上方充满迷烟瘴气。
4.不必多言,你已经成功得到一个畸形的系统,它处于一个神秘的稳定状态!
然后我告诉大家现实意义的后果是什么。
1.“老人”气昂昂,因为系统离不开他,所有“雷区”只有他了然于心。当出现紧急的bug时,只有他能够搞定。你不但不能辞退他,还要给他加薪。
2.新人见光死,但凡招聘来维护这个系统的,除了改出更多的bug外,基本上一个月内就走人,到了外面还宣扬这个公司的软件质量有够差够烂。
3.虽然产品的升级,几个月没有接触这个系统的原创者会发现,很多雷区他本人也忘记了,每次的产品升级周期越来越长,因为修改一个功能会冒出很多bug,而按下一个bug,会弹出其他更多的bug,在这期间,会产生更多的全局变量。有一天他告诉老板,不行啦不行啦,资源不够了,ram或者flash空间太小了,升级升级。
4.客户投诉不断,售后快崩溃了,业务员也尽量不推荐此产品了,市场份额越来越小,公司形象越来越糟糕。
要问我的对策吗,只有两个原则:
1.能不用全局变量尽量不用,我想除了系统参数、通信处理和一些需要效率的处理模块,其他的基本可以靠合理的软件分层和编程技巧来解决。
2.如果用了,能藏多深就藏多深。如果只有该.c文件用,就static到该文件中,顺便把结构体定义也收进来;如果只有一个函数用,那就static到函数里面去;如果非要开放出去让人读取,那就用函数return出去,这样就是只读属性了;如果非要遭人蹂躏赋值,好吧,我还可以严格控制我的.h档被谁包含,而不是放到公共的includes.h中被人围观,丢人现眼。
如此,你可明白我对全局变量的感悟有多深刻。悲催的我,已经把当年那些老人交给我维护的那些案子加班重新翻写了。你能明白吗,请不要让人背后唾弃你。
资料
相关帖子
74hc595好难,我为什么学不会啊,查了一周的资料的也学不会,我该怎么办?
求单片机超级玛丽
给大家提供一些C语言的资料吧~ 求围观
给各位编程爱好者共享一些资料~~!!求围观,求扩散~~
从零开始学单片机C语言,很全的资料
从零开始学单片机C语言,很全的资料
单片机及电子设计制作资料大分享
AltiumDesigner14.2.4视频教程
网上购买的单片机开发板附带的资料教程
【众拳】STM8入门视频教程资料分享
举报
回复
3 个评论
yyz***
新手上路
发表于 2012-9-8 14:16:44
|
显示全部楼层
强啊,读后很有感触!感谢共享,共建强大中国,共同建设伟大祖国
举报
回复
支持
反对
zhaohu***
新手上路
发表于 2014-1-13 16:52:29
|
显示全部楼层
单片机控制流程,或者条件最先想到的就是全局变量,大家通病.模块化也不能完全避免全局变量
举报
回复
支持
反对
zer***
新手上路
发表于 2015-5-29 23:05:44
|
显示全部楼层
很不错!感谢分享
举报
回复
支持
反对
返回列表
*
滑块验证:
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册会员
本版积分规则
发表回复
回帖后跳转到最后一页
回复
转播
评分
分享
打开支付宝扫一扫,最高立得1212元红包
搜索
本版
帖子
用户
热搜:
传感器
51串口程序
电子管放大器
夾式電表
夾式電流
Mentor论坛
打印机
版块推荐
百宝箱
My 布拉格
无边框Z9
Z9Max
Z9mini
nubia动态
问题 & 建议
资源分享
爱拍
同城会
牛仔生活
查看论坛所有版块>>
每日签到
论坛任务
摄影技巧
跳蚤市场
互助问答
论坛导读
申请内测
红包中心
每日摇一摇
活动中心
网站地图
官方旗舰店
图文热点
俄罗斯的6H23+6П43推挽电路机器欣赏
AP3215 8-150V 外围简单 宽输入 电压降压BU
产品描述 AP3215是 一系列外围电路简洁的宽输入电压降压BUCK 恒压恒流驱动器 ,适用
VK1056Q QFN246是一个点阵式存储映射的LCD
产品品牌:永嘉微电/VINKA 产品型号:VK1056Q 封装形式:QFN24L 概述 VK1056Q是
超高清图解示波器使用方法
3线串行接口/工作电压工作电压 2.4-5.2V/VK
产品品牌:永嘉微电/VINKA 产品型号:VK1056B/C 封装形式:SOP/SSOP24 概述 VK1
更多
精华推荐
俄罗斯的6H23+6П43推挽电路机器欣赏
AP3215 8-150V 外围简单 宽输入 电压降压BU
VK1056Q QFN246是一个点阵式存储映射的LCD
一个名为伯努瓦(Gislain)的人,用了3年时
AP2121太阳能草坪灯驱动芯片
超高清图解示波器使用方法
3线串行接口/工作电压工作电压 2.4-5.2V/VK
单片机驱动彩屏最简方案:单片机_RA8889最
更多
社区学堂
俄罗斯的6H23+6П43推挽电路机器欣赏
AP3215 8-150V 外围简单 宽输入 电压降
俄罗斯的6H23+6П43推挽电路机器欣赏
AP3215 8-150V 外围简单 宽输入 电压降压BU
产品描述 AP3215是 一系列外围电路简洁的宽输入电压降压BUCK 恒压恒流驱动器 ,适用
VK1056Q QFN246是一个点阵式存储映射的LCD
产品品牌:永嘉微电/VINKA 产品型号:VK1056Q 封装形式:QFN24L 概述 VK1056Q是
更多
客服中心
QQ:187196467
服务时间:周一至周日 8:30-20:30
在线客服
客服微博
产品咨询
售后中心
关注我们
关于我们
关于我们
友情链接
联系我们
帮助中心
网友中心
购买须知
支付方式
服务支持
资源下载
售后服务
定制流程
关注我们
官方微博
官方空间
官方微信
QQ:187196467
周一到周日 8:30-22:00 (全年无休)
7 x 24小时在线客服
手机版
Powered by
MCUZX!
X3.4 © 2008-2015
MCU资讯论坛
版权所有
京ICP备18035221号-2
客服QQ: 187196467
技术支持:
MCU资讯论坛
|
网站地图
快速回复
返回顶部
返回列表