• 首页
  • 中国
  • msp430头文件中 DEFC DEFW 及周边的解释

msp430头文件中 DEFC DEFW 及周边的解释

2023-11-01 156浏览
百检网是一家专业的第三方检测平台,汇聚众多拥有权威资质的第三方检测机构为你提供一站式的检测服务,做检测就上百检网。百检网让检测从此检测,一份报告全国通用,专业值得信赖。
现象:

从这看见DEFC DEFW

#define __MSP430_HAS_SD16_A1__

#define SD16INCTL0_ (0x00B0u)DEFC( SD16INCTL0 , SD16INCTL0_)#define SD16AE_ (0x00B7u)DEFC( SD16AE , SD16AE_)#define SD16CONF0_ (0x00F7u)DEFC( SD16CONF0 , SD16CONF0_)#define SD16CONF1_ (0x00BFu)DEFC( SD16CONF1 , SD16CONF1_)

#define SD16CTL_ (0x0100u)DEFW( SD16CTL , SD16CTL_)#define SD16CCTL0_ (0x0102u)DEFW( SD16CCTL0 , SD16CCTL0_)#define SD16IV_ (0x0110u)DEFW( SD16IV , SD16IV_)#define SD16MEM0_ (0x0112u)DEFW( SD16MEM0 , SD16MEM0_)

接着找到下面的定义

#ifdef __IAR_SYSTEMS_ICC__#include "in430.h"#pragma language=extended

#define DEFC(name, address) __no_init volatile unsigned char name @ address;#define DEFW(name, address) __no_init volatile unsigned short name @ address;#define DEFXC volatile unsigned char#define DEFXW volatile unsigned short

#endif

#ifdef __IAR_SYSTEMS_ASM__#define DEFC(name, address) sfrb name = address;#define DEFW(name, address) sfrw name = address;

解释:

数值分配伪指令:主要用于对符合的数值定义,以下是常见的定义

EQU在当前模块中赋予一个永久的值

=同上

DEFINE 在多个模块环境下,定义一个在整个文件中都有效的值

sfrb和sfrw 是老的版本对功能寄存器的定义

DEFC 是新的版本对功能寄存器的定义

READ_ONLY DEFC 是新的版本定义只读功能模块寄存器

3.3.1 扩展关键字关键字的概念前面已经介绍过。下面是除了 C语言标准关键字之外的扩展部分,这里只介绍常用的扩展关键字。1.asm也可以写成 __asm。功能是在 C 程序中直接嵌入汇编语言。语法:asm ("string");其中 string 必须是有效的汇编语句。2.__interrupt放在函数前面,标志中断函数。下面这段程序是异步串行口 UART0 的接收中断函数。UART0RX_VECTOR 为异步串行口 UART0 的接收中断向量。举例:#pragma vector=UART0RX_VECTOR__interrupt void UART0_R(void) //UART0接收中断{TXBUF0=RXBUF0;}3.__monitor放在函数前面, 功能是当这一函数执行的时候自动关闭中断。 应该尽量缩短这样的函数,否则,中断事件无法得到及时的响应。4.__no_init放在全局变量前面,功能是使程序启动时不为变量赋初值。5.__raw编译中断函数时,编译器会自动生成一段代码,**保存当时所用到 CPU 内寄存器的内容,退出中断程序时再进行恢复。将__raw放在中断函数前可以禁止保存 CPU内寄存器的过程,当然退出时也不会恢复。是否为中断函数使用此关键字要根据需要而定。6.__regvar放在变量前面,作用是声明变量为寄存器变量。可以用于整数、指针、32 位浮点数以及只含有一个元素的结构和联合。寄存器变量的地址只能为 R4 或者R5,也不能用指针指向这个寄存器变量,而且必须用__no_init 禁止初始化。如:__regvar __no_init unsigned char q0 @ __R4;– 57 –其他不常用的关键字还有:__data16、__intrinsic、__noreturn、 __root、__task、__word16。

IAR编程环境 _no_init

2008-10-20 14:58

百检网秉承“客户至上,服务为先,精诚合作,以人为本”的经营理念,始终站在用户的角度解决问题,为客户提供“一站购物式”的新奇检测体验,打开网站,像挑选商品一样简单,方便。打破行业信息壁垒,建构消费和检测机构之间高效的沟通平台