IAR的MSP430 C编程基础知识

发布者:月光男孩最新更新时间:2015-10-08 来源: eefocus关键字:IAR  MSP430  C编程  基础知识 手机看文章 扫描二维码
随时随地手机看文章
通常我们开发单片机程序都是使用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等函数;还有乘除法的实现等等。
关键字:IAR  MSP430  C编程  基础知识 引用地址:IAR的MSP430 C编程基础知识

上一篇:MSP430的头文件解析
下一篇:51与MSP430区别

推荐阅读最新更新时间:2024-03-16 14:34

MSP430的C语言编写注意事项
============================================================================================================================== 微处理器一般用于特定环境和特定用途,出于成本、功耗和体积的考虑,一般都要求尽量节省使用资源,并且,由于微处理器硬件一般都不支持有符号数、浮点数的运算,且运算位有限,因此,分配变量时必须仔细。另外要说明的是,速度和存储器的消耗经常是2个不可兼顾的目标,在多数情况下,编程者必须根据实际情况作出权衡和取舍。 需要注意的事项如下: 1) 通常在满足运算需求的前提下,尽量选择为变量定义字节
[单片机]
MSP430G2553与MSP430F5336系列单片机总结[4]——比较器B的使用
比较器B是什么,顾名思义,它其实就是用来比较模拟电压+输入端和-输入端的电压大小,然后设置输出信号CBOUT的值的,如果 + 端电压高于 - 端电压,则CBOUT置高,否则置低。主要的控制寄存器有CBCTL0,CBCTL1,CBCTL2,CBCTL3,CBINT,CBIV,在MSP430G2553中没有比较器B,但是F5336中有,所以接下来的代码全都是F5336的比较器B使用程序: 1.比较器B输入通道CB0接外部模拟输入信号,并且引至比较器+输入端,内部参考电压发生器利用共享电压源产生2.0V参考电压。最后当CB0输入模拟信号电压高于2.0V时,CBOUT输出高电平,当CB0输入模拟信号电压低于2.0V时,输出低电平
[单片机]
plc编程
PLC编程是一种数字运算操作的电子系统,专为在工业环境下应用而设计。它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字式、模拟式的输入和输出,控制各种类型的机械或生产过程。 可编程序控制器 及其有关设备,都应按易于使 工业控制 系统形成一个整体,易于扩充其功能的原则设计 随着微处理器、计算机和数字通信技术的飞速发展,计算机控制已扩展到了几乎所有的工业领域。现代社会要求制造业对市场需求作出迅速的反应,生产出小批量、多品种、多规格、低成本和高质量的产品,为了满足这一要求,生产设备和自动生产线的控制系统必须具有极高的可靠性和灵活性,PLC编程正是顺应这一要求出现的,它是以
[工业控制]
IAR for STM8介绍、 下载、安装与注册
Ⅰ、写在前面 本文讲述的内容是IAR for STM8(EWSTM8)的介绍、下载、安装与注册,其安装、注册过程和IAR for ARM类似,如果需要了解IAR for ARM相关的文章,可以到我博客,或微信公众号查看并下载。 IAR系列教程: http://blog.csdn.net/column/details/13696.html 本文内容已经整理成PDF文件,提供给大家下载: http://pan.baidu.com/s/1geClBrH Ⅱ、IAR介绍 1.关于IAR IAR是一家公司的名称,也是一种集成开发环境的名称,我们平时所说的IAR主要是指集成开发环境。 IAR这家公司的发展也是经历了一系列历史变
[单片机]
<font color='red'>IAR</font> for STM8介绍、 下载、安装与注册
正负电源基础知识以及如何符合双向可控硅触发要求
摘要 电源电压在某些情况下被视为正电压或者负电压。对于不经常跟双向可控硅开关管打交道的人来说, 负电源 听起来怪怪的,毕竟集成电路从来不使用负电压。 在有些情况下,双向可控硅驱动电路优先选用负电压。本文介绍几个简单的双向可控硅正电源驱动解决方案。 正电源和负电源 如果功率半导体控制电路需要使用电源,且驱动参考端子连至市电(相线或零线端子),则需要使用非隔离电源。 双向可控硅、ACST、ACS或SCR(可控硅整流管)等交流开关的触发电路就属于这种情况。这些开关器件都是由栅电流控制。栅电流必须加在栅极引脚上,流经栅极和参考端子,参考端子包括SCR的阴极(K)、双向可控硅的A1端子或ACST和ACS开关的COM端子。 因为交
[电源管理]
正负电源<font color='red'>基础知识</font>以及如何符合双向可控硅触发要求
IAR头文件包含路径设置
IAR头文件包含路径设置  这个文件如果是IAR自带的,不需要设置。  如果不是IAR自带的,最简单的办法:和.c文件放在一个目录下,不需要设置。  如果不在同一个目录下,就需要设置, 举个例子  工程上单击右键,选择Option,打开工程设置窗口(如下图) 选择C/C++ compiler,然后再选择Preprocessor,最后在下面的空格处写上相应的路径,路径的格式在后面有专门介绍。如下图: 我的设置:工程文件在 E:S3C2440YS2440_IAR 头文件在 E:S3C2440YS2440_IARlib 则在设置窗口填入:$PROJ_DIR$lib ===========================
[单片机]
<font color='red'>IAR</font>头文件包含路径设置
MSP430看门狗定时器的寄存器定义
/************************************************************ * 看门狗定时器的寄存器定义 ************************************************************/ #define WDTCTL_ 0x0120 sfrw WDTCTL = WDTCTL_; #define WDTIS0 0x0001 /*选择WDTCNT的四个输出端之一*/ #define WDTIS1 0x0002 /*选择WDTCNT的四个输出端之一*/ #define WD
[单片机]
自学PLC编程步骤分享
科学的PLC编程步骤其实很简单,但往往大多数工程师就是认为简单而忽略很多细节。细节的忽略,必然会在以后出现问题。想避免日后的问题,只有好好的遵守规则,没有规矩不成方圆,plc编程一样有其自身的规矩。(仅供参考) 第一步看起来再简单不过了,但很多工程师都做不到。认为这一步是浪费时间,甚至只从供货方培训来了解设备。 仔细阅读说明书是编程的第一步,首先要阅读安全守则,知道哪些执行机构可能会对人身造成伤害,哪些机构间最容易发生撞击,当发生危险时如何解决,这些最致命的问题都在安全守则中,为什么不去看呢? 此外,关于设备每个元件的特性,使用方法,调试方法也在说明书中,不去阅读,即使程序正确,如果元件没有调试好,设备一样不能工作。再
[嵌入式]
自学PL<font color='red'>C编程</font>步骤分享
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved