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.

[参考译文] CC1352R:GCC 链接器错误未解析外部 NOROM_PRCMPowerDomainsAllOn

Guru**** 2452010 points


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

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1125415/cc1352r-gcc-linker-error-unresolved-external-norom_prcmpowerdomainsallon

器件型号:CC1352R

我正在尝试使用 Simplelink SDK 在 GCC 中实现简单的引导加载 程序。BIM 示例利用 PRCMPowerDomainsAllOn 接口来启动通用 GPIO 和 SPI 电源域。

我可以编译、链接和运行这些命令、而不会出现任何问题:

PRCMPowerDomainOn (PRCM_DOMAIN_Periph | PRCM_DOMAIN_serial);

/*等待循环*/

/*根据经验、这以 ms (大约)为单位*/
对于(uint32_t j = 0;j < 3600 * 1000;j++)

_asm (" NOP");

PRCMPeripheralRunEnable (PRCM_Periph_GPIO);
PRCMLoadSet();

但我一补充说:

while (PRCMPowerDomainsAllOn (PRCM_DOMAIN_Periph | PRCM_DOMAIN_serial)
!= PRCM_DOMAIN_POWER_ON);

要等待电源域出现、我会收到链接器错误:

对`NOROM_PRCMPowerDomainsAllOn'的引用未定义

我通过添加硬代码大等待循环(1秒)来解决这个问题、以确保它加电并且系统运行正常、但这是一个巨大的黑客攻击、并且不必要的时间。

是否有任何想法、当其余部分链接正常时、可以删除该特定的 PRCM 函数?

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

    您好 Jason、

    是否确定在链接期间包含 driverlib 库? 您还可以选择从源代码构建 driverlib、方法是在构建中包含必要的源文件(在这种情况下、您需要编译并链接 prcm.c 文件)。

    此致、
    尼古拉伊

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

    Nikolaj、您好、我对 driverlib 的链接比较有信心、与 driverlib 一起使用的所有其他函数似乎都可以工作、包括 IOC 和 GPIO 调用。  以下是链接器命令的清理版本(如果有任何有用的东西)、可能是 Nortos 或驱动程序静态库链接的问题?

    arm-no-eabi-gcc "-L/opt/ti/sdk/simplelink_cc13xx_cc26xx_sdk_6_10_00_29/source"-erstartesisr "-l/kernel/dstep/cc13xx-mthum=armv7e-float-ab-a/simplex-mf-nat_sdk/cc=-g-rf-nate-v2/rf-not-gh/cc-rink-ms/gov-gh/cc-msp-m-r-m-rink/cc-m-m-m-m-rf-nate-v6/cc-m-m-rf-nat/cc-sdk/cc-rf-nate-v/cc-r-r-m-s/-s/-rf-nap-m-m-m-m-s/-s/-m-gh/cc13xx/cc-rf-nate-v-m-m-m-m-m-m-m-m-m-rf-nat/cc-m-m-m-ms/  

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

    您好 Jason、

    您应该知道、大多数 IOC driverlib 函 数实际上将使用 ROM 中实现的 driverlib 函数、而不是 driverlib.lib 中的函数、我只认为使用 driverlib.lib 实现的是 IOCIOEvtSet。 因此 、除非 您使用  IOCIOEvtSet、否则不会使用 driverlib.lib。  所有 GPIO driverlib 函数都在头文件 gpio.h 中定义为内联函数、因此在这种情况下也不会使用 driverlib.lib。

    PRCMPowerDomainOn 和 PRCMPeripheralRunEnable 将使用 ROM 实现、而 PRCMPowerDomainsAllOn 将使用 driverlib.lib 实现。

    因此、我仍然会说、您最有可能遇到问题、因为 driverlib.lib 未正确链接。 例如、您可以尝试调用 NOROM_PRCMPowerDomainOn 而不是 PRCMPowerDomainOn、这将强制使用 driverlib.lib 实现。 我也希望这种情况也会失败。

    也许您可以尝试直接使用"-l"选项。 我对 CCS 中的 gcc 空示例进行了快速测试、这是在使用 CCS 进行编译时进行链接期间使用的选项:  

    "C:/ti/gcc_arm_none_eabi_9_2_1/bin/arm-none-eabi-gcc-9.2.1.exe" -mfpu=fpv4-sp-d16 
    -DDeviceFamily_CC13X2 -O3 -ffunction-sections -fdata-sections -g 
    -gdwarf-3 -gstrict-dwarf -Wall -mcpu=cortex-m4 
    -Wl,-Map,"empty_CC1352P_2_LAUNCHXL_tirtos7_gcc.map" -nostartfiles -static 
    -Wl,--gc-sections -L"C:/ti/simplelink_cc13xx_cc26xx_sdk_6_10_00_29/source" 
    -L"C:/ti/simplelink_cc13xx_cc26xx_sdk_6_10_00_29/kernel/tirtos7/packages" 
    -L"C:/xxxxxxxx/empty_CC1352P_2_LAUNCHXL_tirtos7_gcc/Debug/syscfg" 
    -L"C:/ti/gcc_arm_none_eabi_9_2_1/arm-none-eabi/lib/thumb/v7e-m/hard" 
    -march=armv7e-m -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 --specs=nano.specs 
    -o"empty_CC1352P_2_LAUNCHXL_tirtos7_gcc.out" 
    "./empty.o" "./syscfg/ti_devices_config.o" "./syscfg/ti_drivers_config.o" 
    "./syscfg/ti_sysbios_config.o" "./main_tirtos.o" 
    -Wl,-T"../cc13x2_cc26x2_tirtos7.lds"  -l:ti_utils_build_linker.cmd.genlibs 
    -l:"ti/devices/cc13x2_cc26x2/driverlib/bin/gcc/driverlib.lib" 
    -lgcc -lc -lm -lnosys 

    此致、
    尼古拉伊

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

    仅供参考、它不是直接-l、而是链接操作的顺序、库必须放置在.out 文件之后