一般默认段都是由编译器自动指定的 不过看你这样的写法 IAR的时候是州宏枯没有默认段的 必须由编写者手动指定
比如#pragma section = ".data"就是创建一个名字为.data的段,
然后下面调用
data_ram = __section_begin(".data")
来获取这个段的首地址以备其 *** 作
其他类似
关于pragma section的详细说明如下。 对于#pragma 预处理还有很多功能 感兴趣可以自行搜索
==================================================================================
#pragma section。创建一个段。
其格式为:#pragma section( "section-name" [, attributes] )
section-name是必选项,用于指定段的名字。该名字不能与标准段的名字想冲突。可用/SECTION查看标准段的名称列表。
attributes是可选项,用于指定段的属性。可用属性如下,多个属性间用逗号(,)隔开:
read:可读取的
write:可写的
execute:可执行的
shared:对于载入该段的镜像的所有进程是共享的册洞
nopage:不可分页的,主要用于Win32的设备驱动程序中
nocache:不可缓存的,主要用于Win32的设备驱动程序中
discard:可废弃的,主要用于Win32的设备驱动程序中
remove:非内存常驻的,仅用于虚拟设备驱动(VxD)中
如果未指定属性,默认属性为read和write。
在创建了段之后,还要使用__declspec(allocate)将代码或数据放入段中绝嫌。
例如:
//pragma_section.cpp
#pragma section("mysec",read,write)
int j = 0
__declspec(allocate("mysec"))
int i = 0
int main(){}
该例中, 创建了段"mysec",设置了read,write属性。但是j没有放入到该段中,而是放入了默认的数据段中,因为它没有使用__declspec(allocate)进
行声明;而i放入了该段中,因为使用__declspec(allocate)进行了声明。
ON()是 进入中断,{uint8_t sreg = SREG__disable_interrupt()是关闭所有其他中断,保护期间的程序不厅悄被打断。
当 ENTER_CRITICAL_REGION() 和 LEAVE_CRITICAL_REGION() 之间的程序完成之后,执行 SREG = sreg}便可以允许其他中断了。
因为有的程序不能被帆伏搭中断破坏态拿。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)