我在CMD文件的MEMORY部分定义了一块RAM区域(假如我定义的名字为UserRAMMem),然后在SECTIONS指定了一个段名(假如叫.UserSections )到UserRAMMem存储区域中。
问题1:
在C语言代码中用 #pragmaCODE_SECTION(Fun_1,".UserSections"); Fun_1是一个函数名这样是不是可以将Fun_1这个函数放在
我定义的UserRAMMem内存中去执行了呢?
问题2:
如果我有多个函数都要放在自己定义的内存区域内,可不可以
#pragma CODE_SECTION(Fun_1,".UserSections");
#pragmaCODE_SECTION(Fun_2".UserSections");
#pragma CODE_SECTION(Fun_3,".UserSections");
这样将多个函数都指定到同一个段内?我觉得这样后面的函数会将前面的覆盖了,不知道这样可不可行。
问题3:
#pragmaDATA_SECTION(buf,".UserSections");
使用DATA_SECTION这个时是将buf这个变量存储到指定的内存区域嘛?buf应该是一个指针类型还是任何变量都可以呢?
手里没有硬件没法实际调试有知道的指点下谢谢啦!!!
gaoyang9992006:
最后一个问题是
#pragma DATA_SECTION(bufferB,"my_sect")
char bufferA[512];
char bufferB[512]:
一般这种,你说那个是什么变量呢
数组名并不是指针,也不是常指针,它和一般的变量名一样都是内存地址的助记符。
第一个问题没有查到官方的具体说明,你可以对应每一个的Fun单独设置一个UserSections,比如用统一的编号后缀
gaoyang9992006:
通常第一个问题是这么用的
#pragma CODE_SECTION(funcA, codeA)
查了好多都是这么实现的,用统一的后缀,一对一
user4099083:
回复 gaoyang9992006:
就是说一个函数设置一个对应的段来存放它,
.UserSection : LOAD = FLASH0, RUN = MYRAM, LOAD_START(_RamfuncsLoadStart), LOAD_END(_RamfuncsLoadEnd), RUN_START(_RamfuncsRunStart), PAGE = 0
设置指定段时候是不是必须像上面这样,然后在用
#pragma CODE_SECTION(Fun1,".UserSection "); 和
MemCopy(&_RamfuncsLoadStart, &_RamfuncsLoadEnd, &_RamfuncsRunStart);将函数拷贝到RAM中去。
这里面的
LOAD
RUN
LOAD_START
LOAD_END
RUN_START
这几个关键字是什么含义呢?
========================================================================================================================
还是
.UserSection : {} > UserMemRAM
#pragma CODE_SECTION(Fun1,".UserSection ");然后在用这一个声明就可以呢?
我试了必须用上面的方式才可以正常运行,那#pragma CODE_SECTION(Fun1,".UserSection ");该如何理解,是将Fun1的地址放到UserSection 指定的起始地址嘛?
user4099083:
回复 gaoyang9992006:
我说的变量就是int Var;这样的变量不是一个数组。一般在RAM中存放数据是不是都存放数组的数据啊。