BLOG分享 http://blog.sciencenet.cn/u/VoyagerBu

博文

MCU编程体会

已有 8376 次阅读 2012-5-6 10:59 |个人分类:学术科普|系统分类:科研笔记| C语言, 编程, 经验, mcu, 单片机

    随着技术的进步,单片机的功能越来越强(价格越来越低),现在已经称之为MCU(微控制单元)。尽管嵌入式系统中的高端器件不断涌现,但在许多需要考虑体积、功耗、性价的应用中,8位MCU依然是主流。
 
    网上有不少MCU的编程经验,这里结合自己的编程经历,分享一些MCU编程体会:
 
1、编程之前应该画一张程序流程图,设计好程序框架。一个好的流程图可以提高后续的编程效率,能够及时发现MCU硬件资源的限制。通常人机交互的按键扫描程序可以放在主程序中(后台,响应稍慢),其它功能可以用中断实现(前台,响应及时)。
 
2、MCU选型时,要充分考虑程序的需求。对于消费类产品,节电休眠很重要。有一次,程序编制到一半时才发现,所选的MCU不具备改变引脚电平来唤醒休眠的功能,于是只得重新选型重新编程。
 
3、对电子电路有必要的理解。比如输入按键的防抖动处理,端口的内置上拉输入,I2C总线协议、扫描键盘等。
 
4、注意单片机编程与PC编程的区别。在VC环境中,int型变量的取值范围很大;而在单片机中,无符号int型的上限只有255。第一次编写单片机程序时,看似程序的逻辑没有问题,但执行的效果却面目全非,最终发现是整型变量的累加超过255而导致溢出错误。
 
5、由于硬件资源的限制,很多时候需要共用定时器。有的MCU只有2个定时器,而程序需求中有多个定时要求,这时可以将定时时间(tcc)设短些,通过在程序中设置整型变量(n1、n2、n3等)来实现定时要求(定时要求1=tcc*n1,定时要求2=tcc*n2等)。
 
6、由于硬件资源的限制,有时需要精简代码。现在PC编程完全不必考虑精简代码的问题,因为硬盘空间足够大了,反而有时需要增添不少代码来提高程序的可读性。然而MCU的程序存储器ROM相对很小,有时只有1k;而程序必须满足用户的多种需求,最终很可能会发现程序存储器的空间不够用了,这时需要费力地精简代码。至少有两次出现了这种情况:编制的MCU程序中,再多加1行代码都不行。
 
7、能够看明白汇编代码。目前MCU编程一般都采用C语言,这样具有可读性、可维护性,也减少了代码开发量。然而各个MCU公司的C语言编译器并不一定完美无暇。至少遇到过三次,对程序中的bug百思不得其解;最后阅读由C语言编译成的汇编代码,才发现原来是C语言编译器的缺陷导致汇编程序出现小错误;这类错误很难发现问题的根源,要花费大量的时间与精力。
 
8、不断提高调试能力,这需要耐心与水平。单片机编程与PC编程不同:在VC环境中,可以通过设置断点等方式进行调试;而MCU编译器只提供编译功能,不能直接运行程序。如果需要调试程序,一般要购买MCU公司的专用仿真器。由于多种原因,自己编程时没有仿真器,是通过搭建电路来检查程序功能的,因而只能通过电路的症状来反推程序的问题,这需要耐心。程序调试也是花费成本的,每调试一次,就会报废一只MCU(好在所用MCU的价格较低),因而需要尽量减少调试次数,这需要水平。
 


https://wap.sciencenet.cn/blog-62683-567716.html

上一篇:跨越式发展....
收藏 IP: 222.205.22.*| 热度|

1 方晓汾

该博文允许注册用户评论 请点击登录 评论 (3 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-26 07:44

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部