搜索
bottom↓
回复: 35

IAR的MSP430 C编程基础知识

[复制链接]

出0入0汤圆

发表于 2012-3-29 22:22:50 | 显示全部楼层 |阅读模式
本帖最后由 lcofjp 于 2012-3-29 22:29 编辑

关键字:MSP430,C语言,IAR EW430

前言:本人前段时间大言不惭、口出狂言说要写本430的教材,原帖请见:http://www.ourdev.cn/thread-5300886-1-1.html,本人能力与精力有限,让大家失望了。为了弥补大家,特发此贴,希望对初学者有所帮助,高手轻拍。欢迎大家讨论!

通常我们开发单片机程序都是使用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等函数;还有乘除法的实现等等。
今天就先说到这里。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2012-3-30 09:19:33 来自手机 | 显示全部楼层
支持楼主!顶!

出0入0汤圆

发表于 2012-3-31 10:10:59 | 显示全部楼层
写得很好,继续

出0入0汤圆

发表于 2012-4-3 19:08:35 来自手机 | 显示全部楼层
对我这样的初学者来说写得不错,支持楼主~

出0入0汤圆

发表于 2012-4-5 15:30:29 | 显示全部楼层
搬板凳排排坐,期待后续~

出0入0汤圆

 楼主| 发表于 2012-4-5 15:38:38 | 显示全部楼层
mavericklx 发表于 2012-4-5 15:30
搬板凳排排坐,期待后续~

由于比较忙,后续可能要迟一些,多谢关注。

出0入0汤圆

发表于 2012-4-5 17:15:19 | 显示全部楼层
lcofjp 发表于 2012-4-5 15:38
由于比较忙,后续可能要迟一些,多谢关注。

简单易懂,期待继续

出0入0汤圆

发表于 2012-4-5 20:12:47 | 显示全部楼层
去年看到楼主的帖子,正在入门430,想找找楼主的教程没找到,现在项目已经完成了,用的149

出0入0汤圆

发表于 2012-4-5 20:46:45 | 显示全部楼层
以博客的形式,有时间就写一点,时间长了,就变成一本书了

出0入0汤圆

发表于 2012-4-8 13:06:49 | 显示全部楼层
期待啊,

出0入4汤圆

发表于 2012-4-20 09:30:12 | 显示全部楼层
期待后续章节  
见到熟人了耶

出0入0汤圆

发表于 2012-4-20 23:53:08 | 显示全部楼层
xiaoyigechaos 发表于 2012-4-20 09:30
期待后续章节  
见到熟人了耶

me too   见到熟人了耶

出0入0汤圆

发表于 2012-6-1 13:53:01 | 显示全部楼层
继续,等待

出0入12汤圆

发表于 2012-6-1 14:00:44 | 显示全部楼层
楼主,继续噢

出0入0汤圆

发表于 2012-6-28 20:09:51 | 显示全部楼层
mark,原来头文件在test文件夹里

出0入0汤圆

发表于 2012-6-28 20:36:55 | 显示全部楼层
支持

出0入10汤圆

发表于 2012-7-4 11:08:07 | 显示全部楼层
楼主 3个月过去还没跟新啊?作为初学者急需啊,楼主给力啊

出0入0汤圆

发表于 2012-7-20 13:58:12 | 显示全部楼层
初学者一枚,mark

出0入0汤圆

发表于 2012-12-13 20:26:07 | 显示全部楼层
很不容易找到第一部啊

出0入0汤圆

发表于 2013-1-9 22:34:10 | 显示全部楼层
mark 一下~

出0入0汤圆

发表于 2013-8-12 13:25:20 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-8-12 23:05:45 | 显示全部楼层
额       楼主生孩子去了么

出0入0汤圆

发表于 2013-8-16 17:29:04 | 显示全部楼层
能问一下楼主我的电脑上能同时安装两种版本的IAR而互相兼容吗

出0入0汤圆

 楼主| 发表于 2013-8-16 18:06:08 | 显示全部楼层
yan.ch.ao 发表于 2013-8-16 17:29
能问一下楼主我的电脑上能同时安装两种版本的IAR而互相兼容吗

两个都是可以用的。

出0入0汤圆

发表于 2013-8-17 15:11:47 | 显示全部楼层
顶一个 学习了

出0入0汤圆

发表于 2013-8-17 18:38:55 | 显示全部楼层
期待楼主中

出0入0汤圆

发表于 2013-8-21 04:16:03 | 显示全部楼层
新手期待的教程,谢谢。

出0入0汤圆

发表于 2014-8-13 08:48:48 | 显示全部楼层
楼主应该继续写书,,,很通熟易懂

出0入0汤圆

发表于 2014-8-28 14:05:31 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2014-9-17 20:37:18 | 显示全部楼层
谢谢分享!

出0入0汤圆

发表于 2014-9-29 16:49:32 | 显示全部楼层
CCS怎么安装不上呀给个能安装上的版本吧

出0入0汤圆

 楼主| 发表于 2014-9-29 18:08:18 | 显示全部楼层
vampirejing 发表于 2014-9-29 16:49
CCS怎么安装不上呀给个能安装上的版本吧

CCS没接触过!

出0入0汤圆

发表于 2014-9-29 18:54:50 | 显示全部楼层

其实我是想用IAR编程调试,安装CCS软件看里面的例程

出0入0汤圆

发表于 2014-10-3 10:59:43 | 显示全部楼层
谢谢分享,期待楼主!

出0入0汤圆

发表于 2014-10-3 11:09:46 | 显示全部楼层
学习中……

出0入0汤圆

发表于 2014-10-3 11:10:15 | 显示全部楼层
谢谢分享,最近搞430的时钟学的一趟糊涂,看好楼主的后续了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 11:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表