且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

MSP430常见问题之指令系统类

更新时间:2021-09-13 08:50:31

Q1. IAR中怎样描述P2OUT.3脚,#define LCD_cs1 P2OUT.3; 对吗?
A1:430 不能位寻址,所以一般的位操作,都通过“与”来作用。#define LCD_cs1 (P2OUT&BIT3 )。

Q2.__intrinsic是什么意思
A2:本征函数,不是C语言标准库,而是和MSP430汇编直接对应的函数,比如:
_NOP()
_EINT()
LPM0
引用msp430xxxx.h,默认引用的头文件

Q3:在程序里循环调用了sprintf函数,当循环了几次后程序就跑飞了,是堆栈大小不够吗?还有sprintf到底需要多大的堆栈,单步走了下,发现它使用堆栈都不是连续的?
A3:有可能是的sprintf 函数堆栈数据把跳转地址挤掉,可以调开堆栈看一下。

Q4:数据类型Small,Medium,Large的区别,以及怎么访问大于0X10000的地址空间?数据放在大于0X10000的地址空间中,怎么去访问?同时Small,Medium,Large 在何处可以体现它们的区别?
A4: 可以访问。值得注意的是option 里的General Option 选项内的数据类型得选择Large,程序大小,RAM使用,运行速度都不一样。
1.F5XX 430X
2.选择Large small medium 产生效果是改变指针变量所占字节个数.IAR 中指针变量默认2 个字节,选择large
占用4 个字节,那么指针就可以访问超过64K范围的地址.
3.可以采用IAR 内部函数, */
void __data20_write_char (unsigned long __addr,
unsigned char __value);
void __data20_write_short(unsigned long __addr,
unsigned short __value);
void __data20_write_long (unsigned long __addr,
unsigned long __value);
unsigned char __data20_read_char (unsigned long __addr);
unsigned long __data20_read_long (unsigned long __addr);

Q5:浮点数运算问题,既然2.2A编译器能实现64浮点位运算,那么它的运算程序在哪个文档里。
A5:要使用64位的浮点运算需要设置编译器首先选择project->option->general->target->dou××e floating point size选中"64"再选择project->option->XLINK->include->library->cl430d.r43用c++的朋友要选择dl430d.r43库建议用整型数进行运算,比如像开方,64 位浮点数要用几十毫秒,而整型数随数据大小只要几微秒到几毫秒不等。

Q6:局部变量的问题,在中断服务程序中开中断响应其他中断,发现中断服务中定义的局部变量老被改动,换成全局变量没问题。想问一下这是啥原因?还想问一下c编程过程中应注意的细节?
A6:局部变量只是暂存变量,一般编译器会使用通用寄存器来保存这个变量值,汇编编程的话需要圧栈操作,C语言编程的话建议把变量申明为全局或者静态。