文档库 最新最全的文档下载
当前位置:文档库 › 单片机编程中关于code和no_init的用法

单片机编程中关于code和no_init的用法

单片机编程中关于code和no_init的用法
单片机编程中关于code和no_init的用法

关于CODE的解释

在单片机使用C语言进行编程的时候,经常使用到code。code是keil C51(也就是说,在其它的编译器中可能是其它形式,例如IAR中的CODE)里面的关键字,一般用于定义常量数组,意思是告诉编译说把这个数组放在ROM存储。使用ROM(程序存储器)的好处是加快读取速度,不占用系统资源。

unsigned char code table[]; 表示分配一个指向code区的指针,指针本身在默认存储区。

code unsigned char table[]; 表示分配一个指向默认存储区的指针,指针本身在code区。

关于no_init的解释

no_init用于变量声明。以MSP430系列单片机为例,在默认情况下,MSP430的C语言编译器将变量存放在主RAM中,并在启动时对其进行初始化。no_init类型修正符使编译器把变量放在非易失RAM区中(如EEPROM、FLASH等),在启动时也不对它们进行初始化。在no_init变量的声明中,不能含有初始化。如果用了非易失RAM,连接时要安排在非易失RAM区,地址范围为0x0000~0xFFFF。实际可用范围是0x200~0xFFDF.

举例

例子1:

#define PAGE_ADDRESS 0x7000

#define PAGE_NUMBER (PAGE_ADDRESS >> 11)

__no_init const char__code testData[2048] @ PAGE_ADDRESS;

说明:分配一个指向PAGE_ADDRESS区域(即CODE区域)的指针,指针本身(即testData)在默认存储区。同时,不能对其进行初始化操作。

例子2:

#define PAGE_ADDRESS 0x7000

#define PAGE_NUMBER (PAGE_ADDRESS >> 11)

__no_init const __code char testData[2048] @ PAGE_ADDRESS;

说明:分配一个指向默认存储区的指针,指针本身(即testData)在PAGE_ADDRESS区域(即CODE区域)。

相关文档