This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 如何使用 fusion 指针进行 far 调用

Guru**** 646230 points
Other Parts Discussed in Thread: TMS320VC5410A
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/891547/how-to-make-a-far-call-with-fuction-pointer

器件型号:TMS320VC5410A

工具/软件:TI C/C++编译器

您好!

我将函数指针类型定义为 ftype、 并定义函数 fFun (...)  如下所示:  

typedef int (* ftype)(const int16_t* data_in、
                             int16_t*data_out);

int Fun (   const int16_t* data_in、
                             int16_t* data_out){
 (笑声)

 返回0;

然后,我定义了一个函数指针 pFun,并指向 fFun (..):

ftype pfFun;

PfFun =娱乐;

函数位于地址0x18XXX (扩展存储器)、但函数指针 pfFun = 0x8XXX 、页面1丢失、而不是扩展的0x18XXX。 如果 调用 pFun、程序运行会损坏。

出什么问题了?

我选择运行时模型选项"far fution pointeres(-use_far_alls,-mF)",但链接时 失败:

致命错误#16019:文件"D:/ti/myprojects/vcs/dtmf_aec/rts.lib "

  指定与扩展存储器不兼容的非扩展存储器型号

  在上一个文件或命令行中指定的存储器型号

我该怎么做呢? 如何指定内存模型?

我们的 CCS 版本为 5.5.0.00077、编译器版本为 v4.2.0。

此致、

杜德豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不熟悉 TMS320VC5410A 器件。  假设它支持 far call 和 return 的指令、名为 FCALL fret。  在这种情况下、使用-v548选项告诉编译器。   

    [报价用户="user5926475"]我选择运行时模型选项"far fuion pointers (--use_far_alls、-mf)"、

    也会继续这样做。

    [引用 user="user5926475"]

    但链接时 失败:

    致命错误#16019:文件"D:/ti/myprojects/vcs/dtmf_aec/rts.lib "

      指定与扩展存储器不兼容的非扩展存储器型号

      在上一个文件或命令行中指定的存储器型号

    [/报价]

    您选择了错误的 RTS 库。  让链接器为您选择 RTS 库。  不要指定--library rts.lib (或类似的内容),而是将其更改为--library libc.a.  此方法记录在 位于编译器安装根目录下的文本文件 LINKER_README.txt 中。

    谢谢、此致、

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的乔治:

    我根据您的方向选择相应的选项。 项目构建未成功、但如下所示

    '构建目标:D:/ti/myprojects/vcs/dtmf_aec/dtmf_aec/../Debug/dtmf_aec.out '
    '调用:C5400链接器'
    "d:/ti/ccs5_5/ccsv5/tools/compiler/c5400_4.2.0/bin/cl500 "-define="_debug""--define=c5410a --symdebug:dwarf --display_error_number --gcc --pipelink_warn --silicon_version=548 --use_far_callsumption=0 --gen_error_info=0 --opt_level=0 --"ad_example_dtrad"/ti/myprojects/vcs/dtmf_aec/Debug -"d /ti/myprojects/vcs/dtmf_aec/dtmf_aec:/ti/ccs5_5/ccsv5/tools/compiler/c5400_4.2.0/lib -drom_line-d"d:/ti/myprojects/vcs/dtmf_aec -d_search"-drom_line"-d_samog"/ti/myprojects/vcs/dtmf_aec/Debug/dtmf_aec.map :"d:/ti/ccs5_5/ccsv5/tools/compiler/c5400_4.2.0/include /ti/ccs3_3/C5400/csl/lib /ti/myprojects/vcs/dtmf_aec/Debug/vector_scaling_operations.obj /ti/myprojects/vcs/dtmf_aec/Debug/spl_sqrt_floor.obj /ti/myprojects/vcs/dtmf_aec/Debug/spl_init.obj /ti/myprojects/vcs/dtmf_aec/Debug/real_fft.obj /ti/myprojects/vcs/dtmf_aec/Debug/min_max_operations.obj -drom_ram_ram_line"-d_sines"-"d_sense"-"d_line"-"d_srom_line"-d_srom_linepart":"d_srom_example"-"d_same"-d_same":"d_sinese-d_sinese-d_same":/ti/myprojects/vcs/dtmf_aec/dtmf_aec/../Debug/dtmf_aec.out /ti/myprojects/vcs/dtmf_aec/Debug/spl_sqrt.obj /ti/myprojects/vcs/dtmf_aec/Debug/randomization_functions.obj -d_same":"d_same"-d_separt":"d_same"-d_same"-d_same"-d_sinese-d_same":/ti/myprojects/vcs/dtmf_aec/rts.lib /ti/myprojects/vcs/dtmf_aec/dtmf_aec.cmd /ti/myprojects/vcs/dtmf_aec/Debug/codec_mf.obj /ti/myprojects/vcs/dtmf_aec/Debug/main.obj /ti/myprojects/vcs/dtmf_aec/Debug/delay_estimator.obj /ti/myprojects/vcs/dtmf_aec/Debug/delay_estimator_wrapper.obj /ti/myprojects/vcs/dtmf_aec/Debug/ring_buffer.obj /ti/myprojects/vcs/dtmf_aec/Debug/aecm_core.obj /ti/myprojects/vcs/dtmf_aec/Debug/echo_control_mobile.obj /ti/myprojects/vcs/dtmf_aec/Debug/complex_bit_reverse.obj /ti/myprojects/vcs/dtmf_aec/Debug/complex_fft.obj /ti/myprojects/vcs/dtmf_aec/Debug/cross_correlation.obj /ti/myprojects/vcs/dtmf_aec/Debug/division_operations.obj /ti/myprojects/vcs/dtmf_aec/Debug/downsample_fast.obj "

    致命错误#16019:文件"D:/ti/myprojects/vcs/dtmf_aec/rts.lib "
      指定与扩展存储器不兼容的非扩展存储器型号
      在上一个文件或命令行中指定的存储器型号

    >>编译失败


     此致、

    杜德豪

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您需要从链接器的调用中删除此内容...

    [报价用户="user5926475"]:D:/ti/myprojects/vcs/dtmf_aec/rts.lib

    谢谢、此致

    乔治

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的乔治:

    感谢你的帮助! 它现在可以工作、

    顺便说一下、如何在 C 程序中将一个较大的静态 const 表分配给扩展存储器(0x18000~0x18fff)区域?

    最棒的地方!

    杜德豪