原文:http://zh200581134.blog.163.com/blog/static/96010202010310536447/
Altium Designer
http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/m/project/ms/mspgcc/mspgcc-win32/
http://www.mirrorservice.org/sites/download.sourceforge.net/pub/sourceforge/m/
以m开头的
一些软件的下载
http://mspgcc.sourceforge.net/index.html
http://sourceforge.net/develop/
gcc的官网
TinyOS (moteiv &
mica)
编辑器
没有特定的编辑器,记事本类似的都行,保证所编辑的源文件是“.nc”结尾的nesC程序。
工程管理
一个目录即为一个工程,包括一个makefile檔和一个或多个“components”,组件有两种:
1.
配件(configuration):描述不同组件之间的关系;
2.
模块:(module):描述组件提供的接口中的函数功能的实验过程。
开发环境
在windows下安装cygwin环境,并在cygwin下安装TinyOS的开发工具包,其中包括
avr-binutils,
二进制代码工具
avr-gcc,
avr-insight,
avr-libc,
nesC-1.1.2
nesC编译器
…
编译、运行和下载
TinyOS支持多种硬件平台,每个硬件平台在tos/platform有自己的目录。
在应用程序的目录里/app/Blink下输入:
make tmote
//其中tmote代表的是平台种类。如果target为pc,刚生成的main.exe可
//用于GDB的调试。
上面的语句实际上是按照当前目录的makefile文件运行的,makefile檔中包含了编译、连接等。具体的实现如下:
1.ncc编译链接: #ncc –o
main.exe –target=tmote Blink.nc
//编译生成了main.exe,可以作
//PC机上的模拟之用。
2.转换:
#msp430-objcopy
–output-target=ihex main.exe main.ihex //生成了main.ihex
下载:运行:
#make tmote reinstall,1 //设置网络地址为1
其中运行过程中主要的两个命令如下:
installing tmote bootloader using bsl
####安装启动引导檔,根据开发板的不同而不同。
tos-bsl
–telosb –c 7 –r –I –p
C:/cygwin/opt/moteiv/tos/lib/Deluge/TOSBoot/build/tmote/main.ihex
installing tmote binary
using bsl
#####安装二进制程序。ihex与ihex.out-1文件相同
tos-bsl
–telosb –c 7 –r –I –p build/tmote/main.ihex.out-1
make过程分析
其中提到的目录说明如下:(具体参照上面的图)
opt inyos-1.x oslib
----------------------------------------包括了用到的库函数.
opt inyos-1.x osinterfaces----------------------------------包括接口函数,
opt inyos-1.x osplatform----------包括了不同硬件平台间的配置文件.(启动引导檔在这里)
opt inyos-1.x ossensorboards ------------------------------包括板载传感器的具体实现
可以看到所有的程序都是调用了同一个make规则,除了工程本身所在目录的makefile文件与本工程相关外,在opt inyos-1.xapps目录下的makerule文件是公用的,其中定义了选用的编译器及硬件平台的选择。
TinyOS操作系统设计思想
1.轻量级线程技术(lightweight
thread)
2.主动消息通信技术(active
message)
3.事件驱动模块(event
driver)
4.组件化编程(component-based
programming)
nesC语言把组件化/模块化思想和基于事件驱动的执行模型结合起来。
组件化:其中的组件即“Configuration”(配件)、“Module”。两个东西就像零件一样组合在一起。
模块化:
MSPGCC
编辑器
可以配置一些IDE(集成开发环境),如VIM、UltraEdit、CodeBlocks等,其中VIM是命令行的,用起来很有感觉,CodeBlocks是开源的,UltraEdit为商业软件。但不管怎么样,都是调用的mspgcc安装程序里的make.exe,调试环境是msp430-insight
工程管理
用UltraEdit可以很好的管理工程文件,在工程目录里面应该有一个makefile檔,告诉make如何去生成所要的目录文件和文件之间的依赖关系。同样,用开源的CodeBlocks也可以自己搭建一个很好的IDE,鉴于对CodeBlocks都比较熟悉,即采用之!
开发环境
在windows下安装mspgcc-2007021.exe,注意,这里最好是安装最新版的,在之前我下载的是2003版的,又很多工具都不全,导致一个人摸索了好久。
然后在CodeBlocks里的“settings”项里配置相关的compiler和debugger,最重要的部分是库函数所在的目录位置。
编译、运行和下载
编译和链接部分基本上和相同,只是分别调用的是msp430-gcc.exe、msp430-ld.exe
下载是通过msp430-downloader.exe来下载的。
make过程分析
下面是makefile文件的部分分析:
${NAME}.elf: ${OBJECTS}
#######################msp430-gcc进行编译
msp43o-gcc.exe
-mmcu=${CPU}
-o $@
${OBJECTS} ####生成了
“*.elf”文件
${NAME}.a43: ${NAME}.elf
##################目标文件进行转换
msp430-objcopy
-O ihex $^ $@
##################将elf文件转换为*.a43文件
${NAME}.lst: ${NAME}.elf
##################反汇编,生成*.lst文件,其中
msp430-objdump -dSt $^ >$@
##################这个文件包含了c源码,汇
##################编原码
download-jtag:
all
msp430-jtag -e ${NAME}.elf
download-bsl: all
#####这里的下载工具也是bsl,和TinyOS的tos-bsl类似
msp430-bsl -e ${NAME}.elf
其中,*.a43为TI-Text格式,
*.hex为Intel-hex格式.
IAR_MSP430
编辑器
IAR Embedded Workbench
IDE一个瑞士开发的商用软件的,价格好象在6500.00;目前个人感觉相比开源的MSPGCC也没太大的优势。
工程管理
一个“.eww
”即为一个工程,
开发调试环境
编译、运行和下载
编译:调用“icc430.exe”编译器和已经设定好的一些参数,包括指定的动态库文件,输出文件所在的目录,具体的代码好下:
icc430.exe -I D:Program FilesIAR SystemsEmbedded Workbench
4.0430INC
-I D:Program FilesIAR SystemsEmbedded Workbench
4.0430INCDLIB
-o C:Documents and
SettingsAdministratorMy DocumentsDebugObj
-z3 --no_cse --no_unroll --no_inline
--no_code_motion --no_tbaa --debug -e --double=32
-D_DLIB_CONFIG_FILE=D:ProgramFilesIARSystemsEmbeddedWorkbench4.0430LIBDLIBdl430fn.h
D:Program FilesIAR
SystemsEmbedded Workbench
4.0430FET_examplesfet140C-sourcefet140_1.c
运行上面的命令之后,在“..obj”目录下生成了“*.r43”文件。(The
Obj
directory
is the destination directory for the object files from the compiler
and the assembler. These files have the extension
r43
and will be used as input to the IAR XLINK Linker.)
链接:这里调用的是“xlink.exe”,具体的代码好下:
xlink.exe C:Documents and
SettingsAdministratorMy
DocumentsDebugObjfet140_1.r43
-o C:Documents and
SettingsAdministratorMy
DocumentsDebugExeSMC4200.d43 –I D:Program
FilesIAR SystemsEmbedded Workbench
4.0430LIB
-f D:Program FilesIAR SystemsEmbedded Workbench
4.0430CONFIGlnk430F149.xcl
-f D:Program FilesIAR SystemsEmbedded
Workbench 4.0430configmultiplier.xcl -D_STACK_SIZE=50
-rt D:Program FilesIAR SystemsEmbedded Workbench
4.0430LIBDLIBdl430fn.r43
-e_PrintfLarge=_Printf
-e_ScanfLarge=_Scanf
-D_HEAP_SIZE=50
-s __program_start
##### -o This option creates a UBROF output file,
with a DE>
d43DE>
filename extension, to be used with the IAR
C-SPY Debugger. (The
Exe
directory
is the destination directory for the executable file. It has the
extension
d43
and will be used as input to the IAR
C-SPY Debugger. Note that this
directory will be empty until you have
linked the object files.)
<>
P66
下载:
在下载部分,IAR没有给出很详细的,
总结:
下面是和IAR、Jennic及TinyOS平台做的对比:
开发工具包
IAR
Jennic
TinyOS
MSPGCC
compiler
编译器
C
Compiler
icc430.exe
ba-elf-gcc.exe
ncc.exe
msp430-gcc.exe
msp430-gcc.exe
C++
Compiler
ba-elf-g++.exe
msp430-g++.exe
Linker
链接器
动态库的链接器
xlink.exe
ba-elf-ld.exe
msp430-ld.exe
静态库的链接器
?
ba-elf-ar.exe
msp430-ar.exe
Debugger
ba-elf-gdb.exe
msp430-gdb.exe
make
Make.exe
Make.exe
Make.exe
Download
file
?
*.bin
*.hex.out-1 (tmote)
*.elf *.hex
*.txt
downloader
tos-bsl
download-bsl
AVRGCC、ARMGCC和MSPGCC
IAR
ü
application and library
projects.
ü
The
Obj
directory is the destination directory
for the object files from the compiler and the assembler. These
files have the extension
r43
and will be used as input to the IAR
XLINK
Linker(<>
P69)
嵌入式开发,C语言不可或缺。优秀的编译器直如倚天屠龙。读书时,用过MSP430,编译器为IAR(盗版),code有2K限制。为此,曾攻读过专门以此器为背景的C语言书(蓝封面,北航社,忘其名)。此器,功能强大,调试方便,硬件寄存器皆有显示。窥430之门径,离Hello
World之苦海,伴我几易寒暑,初踏嵌入式之地者,正是此器。
后,一直未曾用430。前些天,某任务要用。我重拾往日之事。IAR终为不完全盗版,破解太烦。懒,不愿做。放狗搜,见mspgcc,版本号:20081230。与gcc一脉传承,想必不错。试用几日,感觉这才是利器!
1. 正版。无限制。
GPL,天下皆知
2. 与gcc系出同源,使用方式极像。
如果用过gcc
查看mspgcc对gcc的扩展
如果没有用过gcc
先了解一下gcc的基本用法,比如
gcc -o hello
hell.c
gcc -S
hell.c
等
然后,mspgcc
其它
goto error;
3. 针对430扩展C语言,汇编能做的,他几乎都能做。
仅在此列出我认为有趣的几个,详情,查手册。
(1)堆栈
mspgcc对堆栈的设置很灵活。你可以为自己保留一定字节的RAM不被C占用。如下声明
int RESERVE_RAM(10) main()
你保留的10字节RAM。
你也可以自己写启动文件,代替标准的启动文件,自己控制进入C语言时的环境。
(2)头文件
在嵌入式开发中,一般会有针对硬件的头文件。其中为特殊功能寄存器定义等。不同的硬件环境,当然需要不同的定义。在mspgcc的开发环境中只需增加
#include
即可。
不同的硬件如何区别?在Makefile文件中或者在编译时说明是哪种430芯片就可以了。这一点,和winavr相同。
(3)中断
中断是硬件的珍贵资源。标准C中似乎没有中断的定义,所以一般采用扩展。mspgcc提供了interrupt关键字,以及控制进入中断方式的选项。比如,下面的中断程序中没有用到诸如R4,R5等其它寄存器,却仍将其在堆栈中保护。
interrupt (ADC_VECTOR) ADC12ISR(void)
{
ADCresult =
ADC12MEM0;
// Move results, IFG is cleared
}
属性naked修饰后,裸奔。不做任何事情,甚至reti都不执行,所以,得自己控制返回。
interrupt (ADC_VECTOR) __attribute__ ((naked))
ADC12ISR(void)
{
ADCresult =
ADC12MEM0;
// Move results, IFG is cleared
asm("reti");
}
mspgcc中扩展了下面这些属性(参考mspgcc手册)。
reserve(x)
When applied to main(), this reserves "x" bytes
of RAM above the stack. This cannot be used with C++ (if C++ is
supported later on).
interrupt(x)
Make the function an interrupt service routine
for interrupt "x".
signal
Make an interrupt service routine allow further
nested interrupts.
wakeup
When applied to an interrupt service routine,
wake the processor from any low power state as the routine exits.
When applied to other routines, this attribute is silently
ignored.
naked
Do not generate a prologue or epilogue for the
function.
critical
Disable interrupts on entry, and restore the
previous interrupt state on exit.
reentrant
Disable interrupts on entry, and always enable
them on exit.
saveprologue
Use a subroutine for the function prologue, to
save memory.
noint_hwmul
Supress the generation of disable and enable
interrupt instructions around hardware multiplier
code.
(4)汇编
mapgcc支持行间汇编。只是,gcc的汇编语言似乎与TI的不尽相同。
4. 烧写
有三种方式
(1) gdb
(2) msp430-downloader.exe
(3) msp430-jtag.exe
5. 调试
当前,最新版mspgcc没有insight,只有gdb。个人感觉不如IAR直观
前些天接了个任务,要把原来在MCU430x149里面的程序移植并烧写到MCU430x1611里面去,以前没用过430,但它的鼎鼎大名早有耳闻,许多论文、报告上都提到过430。大概的搜了些资料,觉得它最突出的地方莫过于功耗小、速度快,据说以前RAM有点小,现在出了16xx,应该是可以满足一些需求了。虽说430声名在外,可上网搜了一通,却发现有用的资料不多,其实我主要是想找一下开发环境,至少程序方面并没有什么太
大的期望,一来有源代码,二来有手册和用户指南,所以在代码上问题应该不大。
430的开发工具一般都是用的IAR,我问了周围的同事,也都这么说,于是就上网费了n大的劲下了一个IAR
For 430
3.41A版的,然后破解、建工程、编译代码,谁知道这时候出问题了,原来代码是用MSPGCC环境编译的,在IAR下错误一大堆。于是就又放弃了IAR,开始搜索MSPGCC,谁知道这个东西的资料少的可怜,按理说是开源软件,用户应该多些,可情景正好相反,鲜有详细的资料,只在利达尔的论坛上有些资料,还都是一两年前的,可能是考虑到开发环境的兼容性,用IAR的占了绝大多数,反正国内用MSPGCC的不多。在摸索了几天,查了n多资料,上了n多网站后(基本上是E文的),终于建立了MSPGCC的编译与仿真环境,下面就是小弟的搭建过程,希望对像我这样的初学者或者对MSPGCC感兴趣的朋友有点用处。
1、从网上下载MSPGCC的安装包(For Windows),可以从这儿下载最新版:http://mspgcc.sourceforge.net/
然后再下载20030506版本:
http://prdownloads.sourceforge.net/mspgcc/mspgcc-20030506.exe
因为新版中没有insight 工具。
2、下载一个WinAVR,主要是为了在Windows下建立一个Linux环境,然后就不用怎么修改Makefile文件了,因为原来程序的环境就是这样建的,所以我也就装了一个,其实WinAVR对MSPGCC来说不是必须的,不过用了它的话会方便一些,并且从AVR上移植程序也方便。
3、先看一下网上的资料,像Asnake兄的Mspgccgo、yfzhcn的MSPGCC学习笔记、finewei的博客,利尔达论坛上都有,看了这些就会有个大概的了解。
4、把MSPGCC和WinAVR都装上,注意MSPGCC要先装老版本的,再装新版,这样就可以支持新MCU,比如说1611,网上也有说先装新版再装旧版的,但我装了之后就识别不了新的MCU,但如果要想用Insight的话,旧版的是一定要装的,只有旧版的才有,新版的没有GUI的调试程序。我在装了旧版的以后,就不再支持1611,如果不装的话没有问题,后来不得不一个一个文件的对比,然后用新版的覆盖。还有就是在装完MSPGCC和WinAVR以后,一定要把cygwin1.dll版本统一,直接用新的覆盖旧的就行了。
5、这些完成之后,打开WinAVR安装时自带的Programmer Notepad
2,然后打开原来的工程,也不用配置(我没有配置,就用的默认菜单配置),然后Makeall就可以了,但我在用MSPGCC的make.exe替换掉WinAVR里的make.exe以后,或者修改菜单配置以后就再也通不过编译,不知道为什么,或者是我那样做根本就不对,还请用过的前辈指点一下。
6、程序make成功以后,就可以下载或者调试了,这个可以参考Asnake兄的Mspgccgo,里面说的很详细,也有图片,我想说的就是在点击了Run
或下载以后,下载的过程很慢,并且Insight看起来像是没有响应一样,但在右上角会有一个绿 {MOD}的下载进度条,这些都是正常的,千万不要以为程序死掉了。
啰唆了这么久,其实过程也很简单的,只是一个人摸索的话费点时间罢了,感觉MSPGCC还是很好用的,用过Linux或用惯了命令行的会觉得很方便的,上手也很容易,并且是免费的,最重要的是现在已经有了AVRGCC、ARMGCC和MSPGCC,程序程序移植起来很方便,呵呵,各位如果感兴趣的话,不妨也试一下,大家也可以相互交流,共同学习。
MSP430单片机问答
Q 1: 如何将msp430与5v 的系统作连结?
A 1: 可以参考我们的一份Application note:slaa148。
Q 2: 除了使用于pda 或smart phone 外,430可否使用在其它的应用中?
A 2: msp430
是一颗混合信号处理能力相当优秀的mcu,为16bit、flash架构,超低功耗的特性使其非常适合用于可携式外围,另外在于一般的meter、传感器应用及低耗电量的应用也非常合适。
Q 3: 在目前的430于数字相机及pda 中,430的主要功能为何?使用到哪些模块?
A 3: 主要使用的是timer_a 及i/o,另外随着功能的强化您可以使用adc及比较器及其它相关模块。
Q 4: 在中国是否有经销点及技术支持人员?
A 4: 有的,您可以与我们苏子杰先生联络。电话是:21-58369345。
Q 5: 我想要学习msp430,请问在软件及硬件设计上有没有更完整的范例?
A 5: 可以与我们联络或是至ti 网站:http://www.ti.com/msp430。
访问网址超出本站范围,不能确定是否安全
继续访问 取消访问www.ti.com/msp430。
Q 6: 我能够使用msp430 中的adc做为voice 的codec 吗?
A 6: 有的,我们有些范例就是实现voice codec,您可以与我们联络取得此范例。
Q 7: 我的系统中有一颗dsp 作为主要的运算核心,msp430 与它们的沟通能力好吗?
A 7: 相当优秀,您可以使用i2c或spi 或uart 与dsp 沟通,我们亦用范例是利用msp430做为dsp 之boot rom
做为更安全之外部程序保护。
Q 8: 听说c 语言的程序效能较为低落,msp430 的c compiler
的效能好吗?如果我想使用msp43的汇编语言作开发会不会很难学?可以在同一个项目中同时使用c 及汇编语言呢?
A 8: 可以在同一个项目中使用c及asm,其效率相当不错,您可以自行将c code转换成asm
code便可以发现其除了效率外,code size 也相当的小。
Q 9: 我对于贵公司的产品很感兴趣,但是不知道价格及交期怎么样?
A 9: 关于价格及其它产品的询问及技术支持,请直接与我们联络方便得到更多更好的服务。
Q 10: 我目前使用8051 作开发,不知道这个IC
会不会很少人用?会不会不好用,模拟功能会不会不强?还要另外增加其它的硬件及线路?
A 10:
无论是在亚洲或是欧美,430均有显注的成长,另外msp430是一颗功能强大的soc,整合了模拟及数字的处理能力,所以您可以放心。
Q 11: 我有遥控器的案子要开发,但是不知道用哪一颗比较合适?在挑选ic上有没有好的建议?
A 11: 我们从最低阶的f1101到高阶的f440 均可以完成ir 的编译码,另外如果您有更多需求,如adc、如lcd
您可以选择其它的msp430 来做为您最适合的解决方案。
Q 12: 我想在仪器设计中采用mps430及有关配套组件和显示系统.不知道该片的更新时间大约是多少?
如果有相关的应用资料请寄来.谢谢北京大学姜天仕
A 12: 如果您使用MSP430F4xx 内的LCD Driver,请参考data
sheet,如果使用lcm,请参考供应商的资料。
Q 13: 能否将此次的演示文稿给大家一份,好让我们有时间时仔细学习一下?
A 13: 您可以于EEPlace 上取得本次投影片,如果需要进一步的支持,请与我们联络。
Q 14: 我们一直使用PC104 嵌入式PC 或DIMM 式PC,以及单片机等开发产品。我们想用DSP来作产品。请问用DSP
来作(或开发)产品,首先需要作哪些准备工作(例如开发平台所需的软件和硬件等),大约需要多少资金。能否提供这方面的建议和方案。并提供帮助。谢谢!易碧金呈上2003.6.24
A 14: 关于DSP 的部份,欢迎您直接与我们联络。
Q 15: MSP430 可能支持MP3解码?
A 15: 目前不能,需另外搭配dsp。
Q 16: 支持的操作系统有哪些?
A 16: 目前您可以在Windows 及Linux 下开发,至于MSP430您可以使用在各种手持设备中。
Q 17: How many the most uart can be used by MSP430? How much
one piece?
A 17: 硬件uart 最高到2组,另外亦可使用sw uart。
Q 18: IAR 4k c-compiler 是表示不能compiler 超过4k 的C code 吗?
A 18: 是指linker 最大只会link 4k的c source code,而在assembler
中并无此限,另外,尚有全功能的30天试用版,如果您有需要请与我们联络。
Q 19: 我在使用TI 的产品(msp-us-trf6900)遇到了一个问题。
A 19: 这蛮奇怪的,也许与您的硬件有关,请直接与我们联络来共同研究解决。
Q 20: 我无法将写好的程序重新download到msp430 上。
A 20: 这蛮奇怪的,也许与您的硬件有关,请直接与我们联络来共同研究解决。
Q 21: 我想请问一下MSP430 是否可以用软件规划呢?
A 21: 新版的iar有提供此功能。
Q 22: 请问msp430F149 的