您的位置 首页 硬件

个人总结:嵌入式编程应该留意的问题

个人认为, 嵌入式编程最难的两部分就是interrupt和MM(memory manage),有些人可能感觉不到,那是因为太多数情况下芯片制造商都帮你写好了,但是如果你本身就在为芯片制造商工作,那

  个人认为, 嵌入式编程最难的两部分便是interrupt和MM(memory manage),有些人或许感觉不到,那是由于太大都状况下芯片制作商都帮你写好了,可是假如你自身就在为芯片制作商作业,那你就有必要自己会写配置文件了,这两个东西之所以比较难是由于要用汇编或类C来写,归于比较低层的东西,中止有外部中止和内部中止,外部中止有两种完成形式,硬件中止形式和软件中止形式,相对来说比较简单,归于应用层面的,相比之下,内部中止就要杂乱得多,内部中止主要是产生重起,总线犯错,溢出,校验犯错等状况产生的,许多软件开发人员基本上不写对应的中止服务程序,由于它太难了,并且一般也用不到,可是一旦产生,那便是fatal error,因而从整个体系健壮性来考虑有必要要有相应的ISR才行,这也是freescale的专家主张的,因个人水平有限,也不方便多说防止误导咱们,下面嵌入式教师谈一下关于嵌入式编程应该留意的问题。

  1、延时

  嵌入式编程经常会涉及到硬件的操作,如ADC,翻开或许封闭一个电流源,这些都是需求时刻的,因而当咱们在宣布这些指令的时分当即读取寄存器的值是得不到想要的成果的,并且你还找不出原因,有时分需求的延时还比较长,到达ms级,一般状况下us级就够了,依据各芯片的时钟频率而定,不单指MCU的总线时钟频率。

  2、变量

  一般来说假如你十分清晰某个变量的效果域和生命周期就应该界说相对的变量,如const,static等,这样不容易犯错,不主张将一切变量都界说成全局变量,这样办理起来比较费事,程序一旦犯错,破坏性也比较大,函数也是如此,全局变量和通用函数必定要声明,这样在调用的时分不容易犯错,并且有些编译器关于未声明的函数是不会报错的,但在调用的时分又会宣布类型隐含转化的正告,在这里就不举比如了,总归这点要特别当心。

  3、宏界说

  在程序编写进程关于一些特定的数字应该尽量运用宏界说,这样做有个长处便是比较直观,便于日后保护,要不然时刻久了你看到那个数字底子就想不起它代表什么意思,宏界说并不会给程序带来任何担负,由于它在编译的时分就现已悉数代替了,所以尽能够广而用之。值得一提的是宏界说并不局限于运用常量,它能够界说函数,由于它是直接替换,因而防止了入栈和出栈,提高了程序履行的功率,其时一起添加了代码量,因而一般用比较简单的函数,它还有一个缺陷是在替换的进程不查看参数类型是否正常,然后添加了安全隐患,处理此问题的办法是运用一个称之为inline的内联函数,它承继了宏界说的长处,又弥补了它的缺陷,是个最佳的挑选,可是这个归于C++的领域,有必定的难度,在这里也不多讲,有爱好的朋友能够参阅一下相关材料。

  4、浮点运算

  大大都低层次的单片机都是不支持浮点运算的,因而在实际运用进程中也很少用到,因而为了降低成本,一般都去掉了浮点运算模块,这就带来了一个问题,假如如果要用到浮点运算怎么办?仔细的朋友或许会发现,即便不具有浮点运算的单片机在仿真调试进程仍然能够运用float or double的数据类型进行核算,并且成果也很准确,这是为什么呢?这个由于编译器主动调用了库函数来完成的,一般是经过迭代的办法,因而它的履行功率十分慢,不主张选用此办法,而一般选用的是“定点”的办法来处理这个问题,比如说一个32bit的数据,你能够假定它的低8位是小数位,然后移位核算,类似于整数运算,这种办法比较杂乱,可是能够十分准确,还有一种办法便是直接扩大10的N次方倍进行整数的核算,能够得出近似值,因而为了不添加不必要的费事,应该总是尽量防止运用浮点运算,一般状况也都是能够防止的。

  5、watchdog

  个人接触到的最先进的watchdog机制是三重watchdog,watchdog1查看时钟频率,watchdog2监督一小段代码,它有必要在一个比较短的时刻里喂一次,一般要求在250us到650us之间喂一次,watchdog3监督一大段代码,要求在比较长的时刻内喂一次,一般是100ms以内,三个条件有必要一起满意才行,这要求对代码的履行进程十分清楚,或许将导致喂狗犯错重起!

  暂时就写这么多了,好的程序永远都是细节决定胜败,这个有必要*平常的铢积寸累,编程是一件烦人的作业,偶然会有那么一点成功的高兴,但毕竟是作业,也没有什么好说的,总归先学好吧,正所谓技不压身。

  在这里出个标题考下感爱好的朋友:

  假定x,y都是unsigned char类型的变量,x的取值规模是(0~15),如何用一条句子完成以下这个if…else结构:

  If(x<8) y=x+8 ;else y=x-8;

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/117521.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部