打印

MSP430开发注意事项与总结

[复制链接]
1764|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Violin11|  楼主 | 2018-8-17 16:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
MSP430开发注意事项与总结

以下是在使用MSP430中的一些总结:

1.系统时钟问题:
系统默认使用DCO,使用外部高速晶振XT2时必须自己开启XT2,并延时50us等待XT2起振,然后手工清除IFG1中的OFIFG位
一定要注意操作顺序:打开XT2->等待XT2稳定->切换系统时钟为XT2
若后面两步操作反了,在通常情况下不会出现问题,但是在电压不稳MCU频繁复位的情况下,非常容易造成MCU死掉,只能掉电后重新上电才能可靠复位。

2.早期版本的IAR开发环境
必须在Project->Option->C-Spy中选择对应器件的DDF文件,否则调试时无SFR窗口。

3.在写Flash期间,一定要关闭中断,此时CPU无法执行程序

4.调试的时候,不要选中”Release JTAG on Go”

5.在调试时,需要关闭看门狗,否则在打开看门狗的情况下,每当执行到断点,程序将会跳转到入口点从头执行。或者,暂停运行或停止到断点处时,当需要继续运行时,程序不再执行,而是需要使用“同步JTAG”才能继续运行(从头运行?)

6. IAR EWB标识符是区分大小写的

7. 结构变量内部存在对齐要求,通常按照2个字节的位置对齐,在”C/EC++ Compiler Reference Guide”的P93又如下例子:
struct {
short s;
char c;
long l;
char c2;
} s;
sizeof(s) 为10,而不是8

可以使用#pragma pack来改变这种对齐方式,但是会导致,这个结构只能按字节方式存取

8. MSP430 IAR C/EC++ Compiler支持两个运行库
1. IAR CLIB : 主要用于8或16为处理器,不完全兼容ISO/ANSI C,也不完全支持IEEE     754浮点数,不支持Embedded C++.
2. IAR CLIB : 支持ISO/ANSI C和Embedded C++.

9. cstartup的定制
(1). 在__low_level_init()中添加代码。该函数可以用来初始化I/O寄存器,并决定数据段是否在cstartup被初始化。文件430\src\lib\lowinit.c给出了框架,copy到项目目录中使用,文件中有一定的使用说明。
(2) 若__low_level_init()中添加代码不能满足要求,则把430\src\lib\cstartup.s43拷贝到自己的工作目录,修改所需代码;然后在将该文件添加到项目,在项目选型的XLINK的include页下选择Ignore CSTARTUP in library即可。

10. 使用#include “io430x14x.h”和#include “in430.h”来替代#include <MSP430x14x.h>
可以使用定义的位变量

可以使用以下方式定义位变量,但是编译器最终还是转换为字节操作:
struct
{
unsigned char WDTIE : 1;
unsigned char OFIE : 1;
unsigned char : 2;
unsigned char NMIIE : 1;
unsigned char ACCVIE : 1;
unsigned char URXIE0 : 1;
unsigned char UTXIE0 : 1;
} IE1_bit;

不推荐使用bitfields,效率很低

11. 数组的索引值用int型效率最高,char型也好略低
数组类型:char型数组效率最高,
其他类型的数组在索引时,都采用了乘法

相关帖子

沙发
51xlf| | 2018-8-18 10:16 | 只看该作者
这个还是调试的问题

使用特权

评论回复
板凳
i1mcu| | 2018-8-18 10:17 | 只看该作者
#i nclude<>指要在编辑器设定目录下,#i nclude""指的是在当前工程目录下。

使用特权

评论回复
地板
pmp| | 2018-8-18 10:17 | 只看该作者
用IAR软件仿真时,可以加入变量,如果是查看I/O信息只需加入PXIN,PXOUT即可。

使用特权

评论回复
5
mmbs| | 2018-8-18 10:17 | 只看该作者
当IO口作为输入时,要根据平时的状态加电阻,平时为高时,加个上拉电阻,平时为低时加个下拉电阻以增加稳定性。

使用特权

评论回复
6
1988020566| | 2018-8-18 10:18 | 只看该作者
如果只用到LFX1的低速时钟,9600bit/s传输的话,接收会出现问题,原因是误差太大,可以设置到4800以下。

使用特权

评论回复
7
lzbf| | 2018-8-18 10:18 | 只看该作者
程序上电会能稳定复位

使用特权

评论回复
8
houjiakai| | 2018-8-18 10:18 | 只看该作者
通常在满足运算需求的前提下,尽量选择为变量定义字节少的数据类型。

使用特权

评论回复
9
youtome| | 2018-8-18 10:18 | 只看该作者
如果堆栈空间有限,尽量减少函数调用的层次和递归调用

使用特权

评论回复
10
cemaj| | 2018-8-18 10:19 | 只看该作者
尽量将变量分配为无符号数据类型

使用特权

评论回复
11
sanfuzi| | 2018-8-18 10:19 | 只看该作者
尽可能的使用局部变量而非全局变量或者静态变量

使用特权

评论回复
12
cemaj| | 2018-8-18 10:19 | 只看该作者
对于指针变量,如果声明后其值不再改变,则声明为const类型,这样编译器编译时能更好的优化生成的代码

使用特权

评论回复
13
51xlf| | 2018-8-18 10:19 | 只看该作者
硬件设计的也需要注意。

使用特权

评论回复
14
youtome| | 2018-8-18 10:19 | 只看该作者
如果传送参数过多,可将参数组成一个数组或者结构体,然后用指针传递

使用特权

评论回复
15
i1mcu| | 2018-8-18 10:19 | 只看该作者
要调用另一个文件中的函数,要把这个函数文件放到当前工程目录下,并且在工程中添加此文件。

使用特权

评论回复
16
houjiakai| | 2018-8-18 10:19 | 只看该作者
尽量不用过长的数据类型,如long、long long和double

使用特权

评论回复
17
pmp| | 2018-8-18 10:19 | 只看该作者
IAR在处理字符时,要注意,是字符处理结尾标志,他和其他编辑软件是不同的。比如我们长用字符处理回

自动在结尾处加,但IAR有些是不加的,这就要十分注意。

使用特权

评论回复
18
lzbf| | 2018-8-18 10:19 | 只看该作者
用&表达式作为判断时,不要忘记加括号。

使用特权

评论回复
19
mmbs| | 2018-8-18 10:19 | 只看该作者
在FLASH写时一定要关外部中断。

使用特权

评论回复
20
1988020566| | 2018-8-18 10:19 | 只看该作者
命名中不能有-,比如:byq-ee会认为是错误的,要用下划线。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

717

主题

1010

帖子

3

粉丝