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.

[参考译文] TMS320F280039C:混合组件与 C

Guru**** 2589300 points
Other Parts Discussed in Thread: TMS320F28035

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1081003/tms320f280039c-mixing-assembly-with-c

部件号:TMS320F280039C
“线程”中讨论的其它部件:TMS320F28035C2000WARE

各位专家:

         我尝试将装配体与 C 混合,但由于某些未知原因,Linker 看不到装配体功能。 我要做的是在这款新微型电脑上开始运行 FreeRTOS。 多年来,我一直在使用一个在 TMS320F28035中运行良好的版本。  我使用的代码考虑 了两个内核之间的差异。  

这是装配体代码的标题和第一个函数

.ref _pxCurrentTCB
.ref _bYield
.ref _bPreemptive
.ref _ulCriticalNesting
.ref _xTaskIncrementTick
.ref _vTaskSwitchContext

.global _portTICK_ISR
.global _portRESTORE_FIRST_CONTEXT

.if .TMS320C2800_FPU32 = 1

.global _getSTF

.text
_getSTF:
MOV32 *SP++, STF
POP ACC
LRETR

这就是编译器的配置方式

构建文件:"./FreeRTOS/portable /CCCS /C28x/porASM.ASM"
调用:C2000编译器
“C:\ti/ccs1100/CCS/tools/compiler/ti-CGT-C2000_26.0.LTS/bin/cl2000”-v28 -ml -MT -CLA_support=le2 -fpu_support=fpu32 -tCharger MU_support=tmu0 -vCU_Dev=vcrc -Ooff -免费驱动器/tradorc/vtradc/spotion_up/ction_up/tradors/tradc/spoup_up_updc/v/ctions/tran/tran/tran/tran/spotion_up_up_updc/supports:免费驱动器控制器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器驱动器 defence_flash --define_inline --symdebug:dwarf_version=3 --c99 --diag_suppress=10063 --diag_waren=225 --diag_wrap=off --display_error_number --gen_func_suppression=on --abi=eabi --preproc_wed_decline/rction_cru_cru.cretc/cretc/cronline/cruorc/cret_cretc/cruorc/sc/cronctions/s
完成构建:"./FreeRTOS/portable /CCCS /C28x/porASM.ASM"

这就是林克

构建目标:“FREE_RTOS.OUT”
调用:C2000链接器
c:/ti/ccs1100/cs/tools/compiler/ti-CGT-C2000_21.6.0.9.LTS/bin/cl2000"-v28 -ml -mt -CLA_support=cl2 --fput_support=fpu32 --T1100MU_support=tmu_21.6 --vcrc -off--cludi_modi="-ref-tim_inch_ecodi_echti="-ref-ref-c_dechti_edi="-ref-ref-c_edi_scap-ref-v-v-refinchinch_edi="-c_dechti="-v-v-v-v-v-citt_inchinchinch_ecos-c_dechti_inchinchinchinchines=100_echti_echti_edi="-c_-c_echti_edi="-c_-c_-v-v-v-v-cittsi-file-v-v-v-v-v-v-v-v-citts- defle_flash --diag_wrap=off --display_error_number --xml_link_info="free_RTOS_linkInfo.xml"--entry_point=code_start --rom_model -o "free_RTOS.out"。/syscfg/board.RTSMC."/main.RTOS"
<linking>

输出显示这一点

undefined first referenced
symbol in file
--------- ----------------
getSTF ./FreeRTOS/portable/CCS/c28x/port.obj
portRESTORE_FIRST_CONTEXT ./FreeRTOS/portable/CCS/c28x/port.obj
portTICK_ISR ./main.obj

总结。 编译汇编代码并生成.obj。 但它不会出现在地图上,链接器 也找不到编译的函数。

我尝试了改变一切,但结果总是一样的。 可能我 必须在设置中更改某些内容,或者在链接器命令中进行一些更改。

链接器和地图已附加。

请提前感谢您的参与。

费尔南多·加托

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

    您可以使用编译器选项--abi=eabi,这意味着您为名为 EABI 的较新的应用程序二进制接口而不是名为 COFF ABI 的较旧的二进制接口构建。  在 EABI 中,像 getSTF 这样的符号名称不会在汇编代码中使用前导下划线书写。  有关详细信息(包括如何解决问题的方法),请参阅 较大 文章 C2000从 COFF 迁移到 EABI的“组装代码更改”部分。

    谢谢,此致,

    乔治

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

    感谢你的帮助。 我不知道这款新工具。 现在它是有效的