本文参考
github chintal
在 Gentoo Linux 下開發 Launchpad MSP430 程式
注意!注意!因为之前用的旧版本的库slac460r没有问题,而最近使用slac460s无法正确识别设备,烧写不正常,所以有问题的可以下载旧版本(r版之前的)。
\
其实GUN开发环境搭建基本都是一个套路,安装交叉编译工具就可以了,然后就是烧写仿真工具了。
交叉编译工具的安装
在ubuntu下可以直接使用如下命令安装
sudo apt-get install gcc-msp430
当然也可以下载其他版本的编译器自己解压安装,本人使用的是msp430-elf-gcc
首先将压缩包解压到自己喜欢的位置,然后设置一下环境变量就可以了。
烧写软件mspdebug的安装与配置
这部是整个搭建过程最麻烦的了
首先是安装,也是一条命令的事
sudo apt-get install mspdebug
但是在使用过程中就出现问题了
在 Gentoo Linux 下開發 Launchpad MSP430 程式这篇文章中使用的平台是MSP430G2,板子上的eZ-FET固件是rf2500版的,mspdebug是支持这个固件的,可以直接通过相应的命令打开调试器,然而我用的F5529固件是其他版本的,mspdebug不支持,这里需要更新一下libmsp430.so。下载源码slac460s.zip选择MSPDS-OPEN-SOURCE下载。
编译libmsp430.so还需要hidapi.h、hid.o两个文件,由hidapi编译获得,hidapi是一套关于hid设备的函数库,比如键盘、鼠标等设备都属于hid设备,下载hidapi源码。另外hidapi的编译需要boost工具,使用以下命令安装boost工具:
sudo apt-get install libboost-thread-dev
sudo apt-get install libboost-filesystem-dev
sudo apt-get install libusb-1.0-0-dev libudev-dev
解压hidapi-0.8.0-rc1.zip,进入hidapi-0.8.0-rc1目录,输入以下命令配置编译:
./bootstrap
./configure CFLAGS='-g -O2 -fPIC'
-fPIC选项表示编译的动态链接库是地址无关的,64位系统不加此选项会报错。
然后解压slac460s.zip,将hidapi.h、hid.o两个文件添加到slac460s相应的目录。
- hidapi/hidapi.h to ThirdPary/include
- libusb/hid.o to ThirdParty/lib64
我的系统是64位,32位复制到ThirdParty/lib/目录进入slac460s目录,修改一下Makefile中HIDOBJ的值,重新设置使用的hid库:
"HIDOBJ := $(LIBTHIRD)/hid-libusb.o" 改为 "HIDOBJ := $(LIBTHIRD)/hid.o"
然后执行make编译得到libmsp430.so,将libmsp430.so复制到/usr/lib/中即可。
可以使用以下命令进入调试模式
mspdebug tilib
这里指定了使用的固件是tilib,tilib调用的就是刚才编译的libmsp430.so。
\
到此整个开发环境搭建完成下面附上一个简单的LED闪烁例程的源码以及Makefile
\
main.c
#include <msp430.h>
/*
* main.c
*/
int main(void) {
volatile int i;
WDTCTL = WDTPW | WDTHOLD;> // Stop watchdog timer
P1DIR = 0x01;
P1OUT = 0x00;
while (1) {
P1OUT ^= 0x01;
for (i = 0; i < 0x6000; i++) {}
}
return 0;
}
Makefile
PROJ = bll
SUPPORT_FILE_DIR = /opt/ti/msp430/gcc/include
CROSS_COMPILE = msp430-elf-
DEVICE = msp430f5529
DEBUG_DRIVER = tilib
CC = $(CROSS_COMPILE)gcc
LD = $(CROSS_COMPILE)ld
GDB = $(CROSS_COMPILE)gdb
CFLAGS = -I $(SUPPORT_FILE_DIR) -mmcu=$(DEVICE) -O2 -g
LFLAGS = -L $(SUPPORT_FILE_DIR)
OBJS = main.o
OBJS += a.o
.PHONY : clean all
all : $(OBJS)
$(CC) $(CFLAGS) $(LFLAGS) -o $(PROJ).elf $(OBJS)
clean :
rm -rf *.elf *.o *.out
erase :
mspdebug $(DEBUG_DRIVER) "erase"
upload :
mspdebug $(DEBUG_DRIVER) "prog $(PROJ).elf"