Part Number:CCSTUDIO-C2000
#pragma CODE_SECTION (fun1,"fun1_addr")
#define fun1add (void (*)(void)) 0x3EC000 //放到flash扇区F CMD中的flash扇区F起始地址为0x3EC000
void fun1()
{
XXXX…..
}
在CMD SECTIONS中加入
fun1_addr : >FLASHF, PAGE =0
编译之后 .map文件中FLASHF的used显示为0,GLOBAL DATA SYMBOLS里也找不到_fun1
在main函数中加入下面两行代码,
Uint32 a;
a=(Uint32)&fun1;
编译之后 .map文件中FLASHF的used就有长度了,GLOBAL DATA SYMBOLS里也有_fun1了,请工程师和各位大佬解答一下。这是为啥,怎么处理fun1写不进flash的问题。
eg:CCS的优化是off状态,0级优化下加入上面两行代码编译,fun1也写不进flash里了。
Yale Li:
您好,fun1是如何声明及定义的?
,
senfeng wang:
直接在main.c定义了fun1
void fun1()
{
函数体
}
在main函数里没有直接调用fun1,所以就没有声明,而且fun1的定义是在main函数之前的
在main函数最后是一个if语句,条件为真的话跳转到fun1函数中执行。
if(xxx)
{
(*fun1add)();
}
也试过在main函数中加入
void fun1();
声明,但是编译之后map文件中看到相应flash位置依然没有被写入。flashf 的used依然是0.
,
Yale Li:
请看一下spru514y_TMS320C28x Optimizing C/C++ Compiler v22.6.0.LTS User's Guide (Rev. Y)的6.9.4 The CODE_SECTION Pragma
,
qingyuan sun:
为什么对我的问题不回复呢?
,
senfeng wang:
看过了,但是感觉对我的问题没有任何帮助啊,我用#pragma CODE_SECTION 将fun1放到指定位置,但不在main函数中调用,需要在某种条件时根据放置的flash地址通过函数指针(*fun1add)()将程序从main函数跳转到fun1函数运行,但是想在编译之后dsp没有在我#pragma CODE_SECTION (fun1,"fun1_addr")中的fun1_addr的地址写入fun1程序,我在cmd文件中的section也添加了fun1_addr :> FLASHF, PAGE = 0 的,不知道这是什么原因引起的,而且ccs的代码优化功能也是关闭的,怎么解决这个问题呢
,
Yale Li:
您试一下在main函数中调用该函数,然后看一下该函数有没有按照预期的那样放入指定地址
,
senfeng wang:
在main函数中加入
Uint32 a;
a=(Uint32)&fun1;
这两句之后fun1就被放入指定的地址了,不加的话为什么会放不进去呢,这是什么原因引起的,怎么解决。
因为我在main函数中时不希望用函数名直接调用的,我希望通过函数指针指定到函数的地址从main函数跳转到fun1函数中。
加入上面的两行之后编译会产生一个变量a未被使用的警告、