TI中文支持网
TI专业的中文技术问题搜集分享网站

CCSTUDIO-C2000: 定义了没有被main函数调用的函数,放到指定的flash扇区中,编译之后发现.map文件中没有出现定义的函数,相应的flash扇区used也为 0

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未被使用的警告、

赞(0)
未经允许不得转载:TI中文支持网 » CCSTUDIO-C2000: 定义了没有被main函数调用的函数,放到指定的flash扇区中,编译之后发现.map文件中没有出现定义的函数,相应的flash扇区used也为 0
分享到: 更多 (0)