msp430系列单片机是不包含唯一序列号的,想用?Sorry,自己烧写到flash里面去!
虽然这个功能使用mspdebug的mw命令很容易实现,可难道每烧写一块单片机都要执行一次uuidgen命令,然后将序列号粘贴在mw命令里,uuidgen的输出还得分割成一个字节一个字节才能使用,这样实在是有点麻烦。
一直说Linux代表了freedom,代表了unlimited possibility,眼下这个情况,正是发挥源代码魔力的机会^_^
Step 1:在sourceforge上下载mspdebug的源代码
http://mspdebug.sourceforge.net/index.html
安装库依赖:
[root@localhost msp430]# yum install readline
[root@localhost msp430]# yum install readline-devel
[root@localhost msp430]# yum install libusb
[root@localhost msp430]# yum install libusb-devel
编译源代码:
[maria@localhost msp430_workspace]$ tar xvf mspdebug-0.23.tar.gz
[maria@localhost msp430_workspace]$ cd mspdebug-0.23/
[maria@localhost msp430_workspace]$ make
创建软链接并在单片机代码目录运行它:
[root@localhost constant_current]# ln -s /home/maria/maria_work/msp430_workspace/mspdebug-0.23/mspdebug /usr/bin/mspdebug-new
[root@localhost constant_current]# mspdebug-new -j uif -d /dev/ttyUSB4
(它和运行mspdebug的效果是一样的。)
(ttyUSB4是仿真器FET430UIF对应的设备号。)
(这里就不要用make install了,从mspdebug源代码目录运行,不要覆盖原来的版本。)
Step 2:修改ui/devcmd.c文件:
#include
#include #define UUID_TEST "/home/maria/.mspdebug/uuid_test" static int do_cmd_prog(char **arg, int prog_flags) { /* 原来的内容不要动它 */ /* mw the uuid to 0xF000*/ int pid; if ((pid = fork()) < 0) { printc_err("Cannot fork child.n"); goto END; } else if (pid == 0) { FILE *file; printc("==> child: fopen uuid_testn"); if ((file = fopen(UUID_TEST, "w+")) == NULL) { printc_err("Cannot open uuid_testn"); exit(1); } printc("==> child: dup2 uuid_test STDOUT_FILENOn"); if (dup2(fileno(file), STDOUT_FILENO) == -1) { printc_err("Cannot dup2 uuid_testn"); fclose(file); exit(2); } fflush(stdout); fclose(file); execlp("/usr/bin/uuidgen", "", "-r", (char *)0); } int status, i, j; FILE *file; char uuid[37]; uint8_t uuid_2[37], hex[16]; waitpid(pid, &status, 0); if ((file = fopen(UUID_TEST, "r+")) == NULL) { printc_err("Cannot open uuid_test.n"); goto END; } fread(&uuid, 36, 1, file); fclose(file); uuid[36] = '