主题中讨论的其他器件:HALCOGEN、
大家好!
我正在尝试使用 FreeRTOS 使 LED 闪烁。 我已经为 RM46L852从 halcogen 生成了代码、它是集成的 FreeRTOS、但我在 FreeRTOS 以及 halcogen 生成的代码方面遇到了一些问题...
有人可以 在 https://github.com/babylone25/launchxl2-rm46L852.git 上查看我的项目 吗?
非常感谢!
此致、
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.
大家好!
我正在尝试使用 FreeRTOS 使 LED 闪烁。 我已经为 RM46L852从 halcogen 生成了代码、它是集成的 FreeRTOS、但我在 FreeRTOS 以及 halcogen 生成的代码方面遇到了一些问题...
有人可以 在 https://github.com/babylone25/launchxl2-rm46L852.git 上查看我的项目 吗?
非常感谢!
此致、
您好 Fabian、
[引用 userid="505290" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1055524/rm46l852-launchxl2-rm46l852-freertos-blinking-led "]我遇到了一些 FreeRTOS 以及 halcogen 生成的代码问题[/quot]问题是什么? 编译工程时是否有任何错误? 您是否按照 HALCoGen 帮助中的步骤配置器件?
我刚刚在 CCS 11中导入了您的项目、并收到了相同的警告:
Invoking: Arm Linker "/home/mr_halfword/ti/ccs1100/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS/bin/armcl" -mv7R4 --code_state=32 --float_support=VFPv3D16 -me --define=DEBUG --define=__LITTLE_ENDIAN__ --define=CSP_LITTLE_ENDIAN=1 --define=RM46L852 --define=TI_HERCULES_FAMILY --define=WATCHDOG_ENABLE=0 -g --diag_warning=225 --diag_wrap=off --display_error_number --enum_type=packed --abi=eabi --section_sizes=on -z -m"RM46L852.map" --heap_size=0x800 --stack_size=0x800 -i"/home/mr_halfword/ti/ccs1100/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS/lib" -i"/home/mr_halfword/ti/ccs1100/ccs/tools/compiler/ti-cgt-arm_20.2.5.LTS/include" --reread_libs --diag_wrap=off --display_error_number --warn_sections --xml_link_info="RM46L852_linkInfo.xml" --rom_model -o "RM46L852.out" "./Third_party/FreeRTOS/source/hooks.obj" "./Third_party/FreeRTOS/source/os_croutine.obj" "./Third_party/FreeRTOS/source/os_event_groups.obj" "./Third_party/FreeRTOS/source/os_heap.obj" "./Third_party/FreeRTOS/source/os_list.obj" "./Third_party/FreeRTOS/source/os_mpu_wrappers.obj" "./Third_party/FreeRTOS/source/os_port.obj" "./Third_party/FreeRTOS/source/os_portasm.obj" "./Third_party/FreeRTOS/source/os_queue.obj" "./Third_party/FreeRTOS/source/os_tasks.obj" "./Third_party/FreeRTOS/source/os_timer.obj" "./Third_party/HAL/source/Device_RM46.obj" "./Third_party/HAL/source/Fapi_UserDefinedFunctions.obj" "./Third_party/HAL/source/adc.obj" "./Third_party/HAL/source/can.obj" "./Third_party/HAL/source/crc.obj" "./Third_party/HAL/source/dabort.obj" "./Third_party/HAL/source/dcc.obj" "./Third_party/HAL/source/ecap.obj" "./Third_party/HAL/source/emac.obj" "./Third_party/HAL/source/eqep.obj" "./Third_party/HAL/source/errata_SSWF021_45.obj" "./Third_party/HAL/source/esm.obj" "./Third_party/HAL/source/etpwm.obj" "./Third_party/HAL/source/gio.obj" "./Third_party/HAL/source/het.obj" "./Third_party/HAL/source/i2c.obj" "./Third_party/HAL/source/lin.obj" "./Third_party/HAL/source/mdio.obj" "./Third_party/HAL/source/mibspi.obj" "./Third_party/HAL/source/notification.obj" "./Third_party/HAL/source/phy_dp83640.obj" "./Third_party/HAL/source/pinmux.obj" "./Third_party/HAL/source/pom.obj" "./Third_party/HAL/source/rti.obj" "./Third_party/HAL/source/sci.obj" "./Third_party/HAL/source/spi.obj" "./Third_party/HAL/source/sys_core.obj" "./Third_party/HAL/source/sys_dma.obj" "./Third_party/HAL/source/sys_intvecs.obj" "./Third_party/HAL/source/sys_mpu.obj" "./Third_party/HAL/source/sys_pcr.obj" "./Third_party/HAL/source/sys_phantom.obj" "./Third_party/HAL/source/sys_pmm.obj" "./Third_party/HAL/source/sys_pmu.obj" "./Third_party/HAL/source/sys_selftest.obj" "./Third_party/HAL/source/sys_startup.obj" "./Third_party/HAL/source/sys_vim.obj" "./Third_party/HAL/source/system.obj" "./Third_party/HAL/source/ti_fee_Info.obj" "./Third_party/HAL/source/ti_fee_cancel.obj" "./Third_party/HAL/source/ti_fee_cfg.obj" "./Third_party/HAL/source/ti_fee_eraseimmediateblock.obj" "./Third_party/HAL/source/ti_fee_format.obj" "./Third_party/HAL/source/ti_fee_ini.obj" "./Third_party/HAL/source/ti_fee_invalidateblock.obj" "./Third_party/HAL/source/ti_fee_main.obj" "./Third_party/HAL/source/ti_fee_read.obj" "./Third_party/HAL/source/ti_fee_readSync.obj" "./Third_party/HAL/source/ti_fee_shutdown.obj" "./Third_party/HAL/source/ti_fee_util.obj" "./Third_party/HAL/source/ti_fee_writeAsync.obj" "./Third_party/HAL/source/ti_fee_writeSync.obj" "./application/source/app_led_task.obj" "./application/source/app_main.obj" "../Third_party/HAL/include/F021_API_CortexR4_LE.lib" "../Third_party/HAL/source/sys_link.cmd" -lrtsv7R4_T_le_v3D16_eabi.lib <Linking> warning #10247-D: creating output section ".kernelTEXT" without a SECTIONS specification warning #10247-D: creating output section ".kernelHEAP" without a SECTIONS specification warning #10247-D: creating output section ".kernelBSS" without a SECTIONS specification FILE: RM46L852.out CODE size (bytes): 61832 CONST size (bytes): 592 DATA size (bytes): 11396这些警告意味着链接器未看到在链接器命令文件中指定的段、因此将命名段放置在任意的存储器区域中。
RM46L852/Debug/RM46L852.MAP 链接映射文件显示 .kernelTEXT、 .kernelHEAP 和 .kernelBSS 段都已放置在 FLASH0中。 需要 将.kernelHEAP 和.kernelBSS 段放置在 RAM 中、并会导致程序在闪存中运行时失败(正如链接器命令文件中未指定的段所发生的那样)。
查看构建中的链接器命令行、CCS 工程将 RM46L852/Third_party/HAL/source/sys_link.cmd 链接器命令文件传递给链接器。 在链接器命令文件中,段不包含 .kernelTEXT、 .kernelHEAP 或.kernelBSS:
SECTIONS { .intvecs : {} > VECTORS .text : {} > FLASH0 .const : {} > FLASH0 .cinit : {} > FLASH0 .pinit : {} > FLASH0 .bss : {} > RAM .data : {} > RAM .sysmem : {} > RAM FEE_TEXT_SECTION : {} > FLASH0 FEE_CONST_SECTION : {} > FLASH0 FEE_DATA_SECTION : {} > RAM /* USER CODE BEGIN (4) */ /* USER CODE END */ }
RM46L852_FreeRTOS/SOURCE/SYS_LINK_cmd 链接器命令文件包含 .kernelTEXT、 .kernelHEAP 和 .kernelBSS 段:
SECTIONS { .intvecs : {} > VECTORS /* FreeRTOS Kernel in protected region of Flash */ .kernelTEXT : {} > KERNEL .cinit : {} > KERNEL .pinit : {} > KERNEL /* Rest of code to user mode flash region */ .text : {} > FLASH0 .const : {} > FLASH0 /* FreeRTOS Kernel data in protected region of RAM */ .kernelBSS : {} > KRAM .kernelHEAP : {} > RAM .bss : {} > RAM .data : {} > RAM /* USER CODE BEGIN (4) */ /* USER CODE END */ }
看起来 CCS 工程的设置方式、FreeRTOS 的正确链接器命令文件尚未使用。
顶级 RM46L852_FreeRTOS 和 RM46L852目录是如何设置的?
如果您将 RM46L852_FreeRTOS/SOURCE /SYS_LINK_cmd 文件复制到 RM46L852/Third_party/HAL/ SOURCE 目录中、即覆盖现有 RM46L852/Third_party/HAL/source/sys_link.cmd、则会删除这些警告。 我刚刚尝试过、没有链接器警告、链接器映射文件显示了看起来正确的段放置方式:
SEGMENT ALLOCATION MAP run origin load origin length init length attrs members ---------- ----------- ---------- ----------- ----- ------- 00000000 00000000 00006c60 00006c60 r-x 00000000 00000000 00000020 00000020 r-x .intvecs 00000020 00000020 00006bf0 00006bf0 r-x .kernelTEXT 00006c10 00006c10 00000050 00000050 r-- .cinit 00008020 00008020 00008578 00008578 r-x 00008020 00008020 00008378 00008378 r-x .text 00010398 00010398 00000200 00000200 r-- .const 08000800 08000800 00000140 00000000 rw- 08000800 08000800 00000140 00000000 rw- .kernelBSS 08001000 08001000 00002b44 00000000 rw- 08001000 08001000 00002000 00000000 rw- .kernelHEAP 08003000 08003000 00000b28 00000000 rw- .bss 08003b28 08003b28 0000001c 00000000 rw- .data
但是、将 RM46L852目录设置为具有 FreeRTOS 支持的 HALCoGen 生成的项目可能更容易维护、因此可以在需要时重新生成 HALCoGen 代码。
切斯特、抱歉、我在看到您回答问题之前重新编辑了我的答案...
实际上、如果我将 RM46L852_FreeRTOS/SOURCE /SYS_LINK_cmd 文件复制到 RM46L852/Third_party/HAL/source 目录中、它会删除这些警告、感谢您!
但我使用 launchpad 测试了代码、但它不起作用。 我仍在执行任务创建... 我想我将尝试使用具有最低 FreeRTOS 功能的 HALCOGEN 重新生成项目。 非常感谢 Chester 的帮助。
此致、
自从上周我就完成了! 可在 https://github.com/babylone25/launchxl2-rm46L852.git 上获取。感谢你的帮助。
此致