0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机嵌入式编程要记住的5个要点

MCU开发加油站 2018-03-29 10:03 次阅读

单片机编程的过程中,如果一名设计者能够同时掌握多门编程语言,那么这名设计者肯定是一位非常优秀的人才。但是想要同时精通汇编C语言C++这三门语言实在是太难了,很多初学者在其中一门的学习中就已经到处碰壁,苦不堪言。本文特意为大家整理了拥有嵌入式编程领域多年工作经验的工程师意见,汇总成了一篇能够对嵌入式编程经验有着指导意义的注意事项,感兴趣的朋友快来看一看吧。

单片机嵌入式编程中,最难的两部分是interrupt和MM(memory manage),之所以有人觉得并不困难,那是因为太多数情况下芯片制造商都已经直接写好,但是如果设计者本身就在为芯片制造商工作,那就必须自己会写配置文件。

这两个东西之所以比较难是因为要用汇编或类C来写,属于比较低层的东西,中断有外部中断和内部中断,外部中断有两种实现模式,硬件中断模式和软件中断模式,相对来说比较简单,属于应用层面的,相比之下,内部中断就要复杂得多,内部中断主要是发生重起,总线出错、溢出、校验出错等情况产生的,很多软件开发人员基本上不写对应的中断服务程序,因为它太难了而且一般也用不到。但是一旦发生,那就是致命错误,因此从整个系统健壮性来考虑必须要有相应的ISR才行,这也是freescale的专家建议的,因所以下面就谈一下嵌入式编程应该注意的问题。

1.延时

嵌入式编程经常会涉及到硬件的操作,如ADC,打开或者关闭一个电流源,这些都是需要时间的,因此当在发出这些指令的时候立即读取寄存器的值是得不到想要的结果的,而且还找不出原因,有时候需要的延时还比较长,达到ms级,一般情况下us级就够了,根据各芯片时钟频率而定,不单指MCU的总线时钟频率。

2.变量

一般来说如果非常明确某个变量的作用域和生命周期就应该定义相对的变量,如const、static等,这样不容易出错,不建议将所有变量都定义成全局变量,这样管理起来比较麻烦,程序一旦出错,破坏性也比较大,函数也是如此,全局变量和通用函数一定要申明,这样在调用的时候不容易出错,而且有些编译器对于未申明的函数是不会报错的,但在调用的时候又会发出类型隐含转换的警告,在这里就不举例子了,总之这点要特别小心。

3.宏定义

在程序编写过程对于一些特定的数字应该尽量使用宏定义,这样做有个好处就是比较直观,便于日后维护,要不然时间久了看到那个数字根本就想不起它代表什么意思,宏定义并不会给程序带来任何负担,因为它在编译的时候就已经全部替代了,所以尽可以广而用之。值得一提的是宏定义并不局限于使用常量,它可以定义函数,因为它是直接替换,因此避免了入栈和出栈,提高了程序执行的效率,但是同时增加了代码量,因此一般用比较简单的函数,它还有一个缺点是在替换的过程不检查参数类型是否正常,从而增加了安全隐患,解决此问题的方法是使用一个称之为inline的内联函数,它继承了宏定义的优点,又弥补了它的缺点,是个最佳的选择,但是这个属于C++的范畴,有一定的难度,在这里也不多讲,有兴趣的朋友可以参考一下相关资料

4.浮点运算

大多数低档次的单片机都是不支持浮点运算的,因此在实际使用过程中也很少用到,因此为了降低成本,一般都去掉了浮点运算模块,这就带来了一个问题,如果万一要用到浮点运算怎么办?细心的朋友可能会发现,即使不具有浮点运算的单片机在仿真调试过程依然可以使用float or double的数据类型进行计算,而且结果也很准确,这是为什么呢?这个因为编译器自动调用了库函数来实现的,一般是通过迭代的方法,因此它的执行效率非常慢,不建议采用此方法,而通常采用的是“定点”的方法来解决这个问题,比如说一个32bit的数据,可以假定它的低8位是小数位,然后移位计算,类似于整数运算,这种方法比较复杂,但是可以非常精确,还有一种方法就是直接放大10的N次方倍进行整数的计算,可以得出近似值,因此为了不增加不必要的麻烦,应该总是尽量避免使用浮点运算,一般情况也都是可以避免的。

5.watch dog

以三重watch dog为例,watch dog1检查时钟频率,watch dog2监视一小段代码,它必须在一个比较短的时间里喂一次,一般要求在250us到650us之间喂一次,watch dog3监视一大段代码,要求在比较长的时间内喂一次,一般是100ms以内,三个条件必须同时满足才行,这要求对代码的执行过程非常清楚,或者将导致喂狗出错重起。

这里需要向大家强调的是,在单片机嵌入式的编程过程中程序的好坏往往是由细节决定的,一个程序写的是否详细、灵活,是与日积月累的知识积累与实际磨练成正比的。虽然编程是意见非常枯燥甚至乏味的过程,但成功后的喜悦能够让大家相信这份付出是值得的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6044

    文章

    44632

    浏览量

    639392
  • 编程
    +关注

    关注

    88

    文章

    3642

    浏览量

    94089

原文标题:单片机嵌入式编程的五个注意事项

文章出处:【微信号:mcugeek,微信公众号:MCU开发加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式linux和单片机

    嵌入式linux和单片机嵌入式物联网开发,linux,单片机32一.嵌入式介绍二.linux系统介绍1.ubuntu使用安装2.shell
    发表于 07-14 07:00

    什么是嵌入式单片机?嵌入式单片机详情汇总

    嵌入式单片机,即嵌入式微控制器,指以微控制器为核心控制单元的嵌入到对象体系中的专用计算机系统,是应用十分广泛的一种嵌入式系统结构。
    发表于 11-13 09:39 6127次阅读

    单片机嵌入式的概念

      单片机嵌入式很多学者将他们混在一块,当往往被问起单片机嵌入式有啥区别的时候,他们的回答通常是二者都差不多吧。没有一清晰明确的回答。
    发表于 07-10 11:21 2472次阅读

    单片机嵌入式的转化

    提到单片机很多人都很觉得不陌生,大街小巷上面电子产品都用到。近几年随着嵌入式的发展,做单片机的一帮家伙突然觉得大祸临头一般发现自己熟悉掌握的单片机慢慢被
    发表于 09-22 10:13 1114次阅读

    到底什么是嵌入式? 什么是单片机

    到底什么是嵌入式?什么是单片机
    的头像 发表于 02-25 16:13 1.5w次阅读

    什么是嵌入式编程

    什么是嵌入式编程?对于嵌入式系统,许多人很容易将它与单片机编程混淆。其实,嵌入式
    发表于 06-29 11:05 1.1w次阅读
    什么是<b class='flag-5'>嵌入式</b><b class='flag-5'>编程</b>

    怎么学习嵌入式单片机

    关于怎么学习嵌入式单片机,我从自身学生经历、工作经验和对于嵌入式单片机学习的建议三方面回答:
    发表于 07-15 17:37 1033次阅读

    工程师:关于单片机是否嵌入式Linux的观点

    的offer,所以今天分享一些关于单片机是否嵌入式Linux的一些观点。 一、你真的决定要转嵌入式Linux吗? 要不要从单片机
    的头像 发表于 10-18 10:05 2432次阅读

    单片机嵌入式区别

    单片机嵌入式芯片平台片上资源价格应用场景不同开发模式技术特征芯片平台主流单片机平台:51、PIC、STM32、AVR、MSP430等主流嵌入式平台:ARM(最广泛)、PPC(老美、欧
    发表于 10-20 14:21 4次下载
    <b class='flag-5'>单片机</b>与<b class='flag-5'>嵌入式</b>区别

    单片机是否为嵌入式技术,单片机嵌入式学哪个?

    单片机嵌入式,我喜欢用儿子和爸爸这种关系去区分它们。我当初是通过嵌入式挖到了单片机开发,所以说单片机
    发表于 10-20 15:06 14次下载
    <b class='flag-5'>单片机</b>是否为<b class='flag-5'>嵌入式</b>技术,<b class='flag-5'>单片机</b>和<b class='flag-5'>嵌入式</b>学哪个?

    单片机or嵌入式linux

    最近很多童鞋投票并咨询如何从单片机转做嵌入式Linux开发。看来读者圈中做单片机,RTOS的不少。尽管我目前从事Linux/Android方面的嵌入式开发工作,但是读书的时候也有
    发表于 11-01 16:26 17次下载
    <b class='flag-5'>单片机</b>or<b class='flag-5'>嵌入式</b>linux

    单片机到底是不是嵌入式

    01 问题很多同学一直在纠结:我是学单片机呢还是学嵌入式呢?还有人说单片机也是嵌入式,到底对不对?嵌入式是不是就是linux?今天咱们说说这
    发表于 11-04 11:21 14次下载
    <b class='flag-5'>单片机</b>到底是不是<b class='flag-5'>嵌入式</b>?

    是否要从单片机转为嵌入式Linux

    最近很多童鞋投票并咨询如何从单片机转为嵌入式Linux开发。看来读者圈中做单片机,RTOS的不少。尽管小编目前从事Linux/Android方面的嵌入式开发工作,但是读书的时候也有
    发表于 11-13 20:51 11次下载
    是否要从<b class='flag-5'>单片机</b>转为<b class='flag-5'>嵌入式</b>Linux

    单片机嵌入式的区别

    单片机嵌入式的区别平台区别: 主流的单片机平台有51,PIC,STM32,AVR,MSP430, 主流的嵌入式平台有ARM,PPC,MIPS资源,价格,应用领域
    发表于 11-15 12:36 15次下载
    <b class='flag-5'>单片机</b>和<b class='flag-5'>嵌入式</b>的区别

    1.单片机嵌入式的关系(3)

    单片机嵌入式的关系什么是单片机?什么是嵌入式单片机嵌入式的核心差异
    发表于 12-01 15:51 16次下载
    1.<b class='flag-5'>单片机</b>和<b class='flag-5'>嵌入式</b>的关系(3)