Part Number:TMS320F28388DOther Parts Discussed in Thread:DAC81416
CCS版本 Version: 11.1.0.00011
编译器版本 ti-cgt-c2000_21.6.0.LTS
参照编译器文档139页的说明,我将希望在RAM中执行的函数添加了ramfunc属性说明
在没有切换到flash模式时,函数中的关键字是正常显示的,如下图所示:
但是切换到flash模式后,原本正常显示的关键字都不显示了,如下图所示:
而且在函数名上用快捷键F3只能将函数定位到其声明处,如下图所示:
不过编译时没问题的,看.map文件的编译结果也是没问题,请问这是为什么呢?
user78960159:
还有一个相关的问题请教下大家,如果在定义某个函数的时候,使用了ramfunc属性,或者使用原来的#pragma声明一下,对应的函数就会加载到flash,最终搬移到ram中运行
不过,该函数中如果调用了其他函数,这些其他的函数并没有一起搬移到ram中运行,如下图所示:
从.map文件中看,TIMER0_ISR是搬移到ram了,但是TIMER0_ISR中断函数中调用的函数,DAC81416_SPI_Write,如下图所示
其地址为
,可以看到,DAC81416_SPI_Write并没有随着TIMER0_ISR一起搬移到ram中,请问大家一般怎么处理这个问题呢?
是要搬移到ram中执行的中断函数中要用语句逐条写要实现的功能,不用函数封装吗?
再有就是如我其中调用了宏函数,如我这里使用的RC_MACRO,编译器会怎么处理呢?
,
Cherry Zhou:
您好,您的问题我们需要升级到英文论坛看下,有答复尽快给您。
,
Cherry Zhou:
您好,
user78960159 说:但是切换到flash模式后,原本正常显示的关键字都不显示了,如下图所示:
工程师这边使用最新版本的 CCS 可以重现此问题。 将属性关键字应用于函数似乎会导致索引器出现问题。 可以看到解析器日志中针对该行指示了一些语法错误。
user78960159 说:不过编译时没问题的,看.map文件的编译结果也是没问题,请问这是为什么呢?
索引器和编译器是不相关的。 索引器是 Eclipse 随附的解析器工具,可扫描工程的所有源代码并构建编辑器所用的缓存(索引),用于语法突出显示、代码完成、只用于声明等。与编译无关。 分度器是一个已知的小bug。
我们会注意这个问题。 但请注意,由于 CCS 只是利用 Eclipse CDT 分度器,因此我们并没有该分度器。 因此如果索引器本身需要修复,那么可能是我们无法自行解决的问题。 另请注意,CCS Eclipse 环境逐渐被弃用,而不是我们的新 CCS Theia 环境。
user78960159 说:
是要搬移到ram中执行的中断函数中要用语句逐条写要实现的功能,不用函数封装吗?
再有就是如我其中调用了宏函数,如我这里使用的RC_MACRO,编译器会怎么处理呢?
ramfunc 属性一次只适用于一个函数。 它不会自动传播到由具有 ramfunc 属性的函数调用的函数。
有一个编译器选项–ramfunc=on。 之前并没有用户在构建整个项目时使用它。
相反, file specific options feature of CCS是用来一次将其应用于一个文件。 在这种情况下,该文件中的所有函数都构建为使用 ramfunc 属性的形式。
,
user78960159:
了解 感谢帮助
,
user78960159:
我目前想到的解决办法 是将中断函数集中到一个用户创建的C文件中,然后在其编译tag中增加 –ramfunc=on选项
原本我的编码习惯是使用默认的F2837xD_DefaultISR.c文件,在这个文件中定义的对应的中断函数中增加自己的代码
这样看来这个习惯是不是要改一下。因为F2837xD_DefaultISR文件定了所有的中断函数,将其ramfunc=on后,会占用太多的ram空间
,
Cherry Zhou:
我们向工程师确认下。
,
Cherry Zhou:
您好,我们的工程师只能解释编译器的 ramfunc 功能。 如何将这些功能应用于您的特定环境取决于您。 不过您以上的解决方案似乎是合理的。