您的位置 首页 报告

IAR的MSP430 C编程基础知识

通常我们开发单片机程序都是使用C语言的,为什么C语言比汇编方便呢?原因就是C编译器在为我们做着大量的琐碎的组织翻译工作。在此感谢IAR,

一般咱们开发单片机程序都是运用C言语的,为什么C言语比汇编便利呢?原因便是C编译器在为咱们做着很多的琐碎的安排翻译作业。在此感谢IAR,辛辛苦苦的劳作着,却没有辛苦钱!
好,咱们从新建一个工程开端,翻开IAR,空白,project,create new project,C,main,确认。给工程起个姓名,保存。OK,工程树立结束了。这时工程里现已有个main.c了,并且有一个完好的程序,如下:

#include “io430.h”

int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;

return 0;
}
Make一下,保存作业区文件,就可顺畅编译通过了。
(本人所运用的IAR版别为5.3,为了能体会更好的IAR特性,请运用较新且较安稳的版别)
从头文件包括说起,这个io430.h是IAR为C言语所引荐的头文件,这个头文件以匿名结构体的方法对430的寄存器进行声明,匿名结构体现已在C11中归入规范C,这种声明方法在ARM中广为流传。之前较早的版别或许运用的是msp430.h,这个头文件都是以宏界说的方法对寄存器进行声明的,C和汇编都可以包括此文件,这里有丰厚的宏界说,如SELA__REFOCLK,挑选REFOCLK作为ACLK。这在io430.h是没有的,因而假如曾经的工程包括的是msp430.h,那么移植到运用io430.h将会呈现一些问题。
头文件的挑选依据自己的习气决议,可是像弄巧成拙相同把头文件改成#inlcude “msp430f149.h”就没有必要了,由于IAR现已主动帮咱们挑选了适宜的头文件,这在移植到其他的器材时,不用做任何更改;咱们所要做的便是在工程的option中,挑选咱们的device,咱们新建的这个工程默许的device为msp430f149,现在咱们替换器材为msp430f5418A,从头make一下。咱们来看工程左面的文件拓扑结构,如图1.1:

1.IAR为咱们主动包括了io430f5418a.h和intrinsics.h
2.便是test.d43所包括的这些文件:test.d43是终究生成的可履行文件。这个可履行文件是由他下面的4个衔接而成的。Main.r43是由main.c生成的方针文件;dl430xsfn.r43便是大名鼎鼎的C运行时库,咱们觉得这个词汇了解吗?运行时库会依据工程的设置不同而不同,IAR中约有20左右个运行时库,详细可参阅compiler reference;Lnk430f5418a.xcl文件中包括芯片的存储器安排结构,用来指定程序数据和代码的寄存方位;mutipiler43_loc2.xcl是由于5418a内部具有硬件乘法器而呈现,奉告编译器用硬件乘法器来进行乘法运算。
现在来了解一下一个耳熟的词汇:C运行时库
众所周知,在单片机上电瞬间,只要flash中有数据和代码,RAM的内容是不确认的。单片机履行的第一条指令肯定不是main函数,而是C运行时库的初始化函数,为咱们写的C代码建立C运行时环境。首要设置SP,也便是设置栈,SP一般设置为RAM的最高地址。其次便是初始化内存,初始化全局变量,静态变量,以及在RAM中的函数,这些数据都是从flash中复制过来的,因而咱们的变量不只仅占用着RAM,还有或许占有着一份flash(未初始化的全局变量和静态变量初始化为0,将未初始化的数据放在一个区域,只需求将这个区域清0即可,不需求从flash复制)。数据初始化结束后就开端从main函数开端了,履行咱们所写的代码。由于430的看门狗在复位之后是开着的,因而需求初始化数据量过大的话,就有或许导致看门狗溢出复位,然后main函数永久得不到履行。处理此问题的方法便是在程序中参加一个函数:int __low_level_init(void),在此函数中参加中止看门狗的句子,并回来1即可,__low_level_init函数将在初始化代码之前履行。
注:初始化代码并未包括在dl430xsfn.r43中,应该是由编译器独自生成的一段代码,我了解这些代码应该归于C运行时库的领域。这都是我的个人见解。
C运行时库还包括着一切的C规范库,如strlen、memcpy等函数;还有乘除法的完成等等。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部