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.
工具/软件:Code Composer Studio
你(们)好
我正在尝试调整(Arduino u8g2库至 F28027F)
https://github.com/blotfi/c2000_u8g2
原始库: https://github.com/olikraus/u8g2
它会编译、但我遇到的内存问题不够! (请访问 e2e.ti.com/.../oled27f.txt)
因此、olikraus 建议使用所谓的链接器垃圾收集器
https://github.com/olikraus/u8g2/issues/549#issuecomment-385230689
您能在 CCS 中展示一下这个选项吗
谢谢
[引用 USER="Lotfi]SO、olikraus 建议使用所谓的链接器垃圾收集器[/quot] CCS 下的等效选项是将"将每个函数放在单独的子段中(--gen_func_subsections、-mo)"和"将结构和数组放在单独的子段中(--gen_data_subsections)"运行时模型选项设置为 on:
[引用 user="Lotfi">它会编译,但我遇到的内存不足问题! (请查看(请访问该站点以查看此文件)查看链接器映射文件会遇到两个问题:
1、已选择一个 TMS320F280200器件(8K 字的闪存和3K 字的 SARAM)、此器件的内存少于 LAUNCHXL-F28027F 上的实际 TMS320F28027F (64K 字的闪存和12K 字的 SARAM)。
无法分配的.ebss.1段需要107274个字的 SARAM、这是 TMS320F28027F 上可用 SARAM 的8倍以上。
因此、将 CCS 项目中的器件更正为 TMS320F28027F 并启用"链接器垃圾收集器"后、怀疑该程序不适用。
谢谢
我可以在 CCS 项目27F 中的什么位置指定?
Arduino Nano
闪存32k 字节(其中.5k 用于引导加载程序) SRAM 2k 字节
适合类似的计划!
因此、有一个优化的问题
器件是在常规 CCS 属性中指定的。CCS 项目27F 中可以在哪里指定器件?
另外,奥利克劳斯还提到:
U8G2在很大程度上取决于链路时间优化。 这意味着将删除未使用的函数和未使用的数据对象。 在与您的环境进行链接时没有发生这种情况。
对于 gcc、这是可用的(因此称为链接器垃圾收集器)、这也是 Arduino 环境的默认设置。
现在、通过优化级别4来调整大小(0)、而不是速度
我有更好的结果,它只符合:
#10247-D 在没有 SECTIONS 规范的情况下创建输出段".CIO"已定义27f C/C++问题
秘书长的报告
TMS320C2000链接器 PC v16.9.3.
秘书长的报告
>> 2018年4月29日20:19:26日链接
输出文件名:
入口点符号:"_c_int00"地址:003f76CF
存储器配置
名称源长度使用未使用的属性填充
------------ ---- ------ ---- ---- --------
第0页:
RAMM0 00000050 000003b0 00000004 000003ac RWIX
OTP 003d7800 00000400 00000000 00000400 RWIX
FLASHB 003f6000 00001000 0000010f 00000ef1 RWIX
FLASHA 003f7000 00000f80 00000f7e 00000002 RWIX
csm_RSVD 003f7f80 00000076 00000000 00000076 RWIX
开始003f7ff6 00000002 00000002 00000000 RWIX
CSM_PWL_P0 003f7ff8 00000008 00000000 00000008 RWIX
IQTABLES 003fe000 00000b50 00000000 00000b50 RWIX
IQTABLES2 003feb50 0000008c 00000000 0000008c RWIX
IQTABLES3 003febdc 000000aa 00000000 000000aa RWIX
ROM 003ff27c 00000d44 00000000 00000d44 RWIX
重置003fffc0 00000002 00000000 00000002 RWIX
矢量003fffc2 0000003E 00000000 0000003E RWIX
第1页:
BOOT_RSVD 00000000 00000050 00000000 00000050 RWIX
RAMM1 00000400 00000400 00000400 00000000 RWIX
DEV_EMU 00000880 00000105 00000004 00000101 RWIX
SYS_PWR_CTL 00000985 00000003 00000003 00000000 RWIX
FLASH_regs 00000a80 00000060 00000008 00000058 RWIX
CSM 00000ae0 00000010 00000010 00000000 RWIX
ADC_Result 00000b00 00000020 00000020 00000000 RWIX
CPU_TIMER0 00000c00 00000008 00000008 00000000 RWIX
CPU_Timer1 00000c08 00000008 00000008 00000000 RWIX
CPU_TIMER2 00000c10 00000008 00000008 00000000 RWIX
PIE_CTRL 00000ce0 00000020 0000001a 00000006 RWIX
PI_VECT 00000d00 00000100 00000100 00000000 RWIX
COMP1 00006400 00000020 00000020 00000000 RWIX
COMP2 00006420 00000020 00000020 00000000 RWIX
EPWM1 00006800 00000040 00000040 00000000 RWIX
EPWM2 00006840 00000040 00000040 00000000 RWIX
EPWM3 00006880 00000040 00000040 00000000 RWIX
EPWM4 000068c0 00000040 00000040 00000000 RWIX
eCAP1 00006a00 00000020 00000020 00000000 RWIX
GPIOCTRL 00006f80 00000040 00000040 00000000 RWIX
GPIODAT 00006fc0 00000020 00000020 00000000 RWIX
GPIOINT 00006fe0 00000020 0000000a 00000016 RWIX
系统00007010 00000020 0000001f 00000001 RWIX
SPIA 00007040 00000010 00000010 00000000 RWIX
SCIA 00007050 00000010 00000010 00000000 RWIX
NMIINTRUPT 00007060 00000010 00000010 00000000 RWIX
XINTRUPT 00007070 00000010 00000010 00000000 RWIX
ADC 00007100 00000080 00000051 0000002f RWIX
I2CA 00007900 00000040 00000022 0000001e RWIX
RAML0 00008000 00000400 00000400 00000000 RWIX
部件 ID 003d7fff 00000001 00000001 00000000 RWIX
CSM_PWL 003f7ff8 00000008 00000008 00000000 RWIX
部分分配映射
输出属性/
段页原点长度输入段
---- -------- ------ --------
.cio 0 00000000 00000120无法分配
.ebss.1 0 00000000 00000120分配失败
econst.1
0 003f6000 00000086
003f6000 00000035 u8x8_d_ssd1306_128x64_noname.obj (.econst:.string:_u8x8_d_ssd1306_128x64_noname_init_seq$47)
003f6035 00000001 --hole --[填充= 0]
003f6036 00000014 u8x8_d_ssd1306_128x64_noname.obj (.econst:_u8x8_ssd1306_128x64_noname_display_info47美元)
003f604a 00000010 (.econst)
003f605a 0000000b (.econst:.string)
003f6065 00000007 u8x8_d_ssd1306_128x64_noname.obj (.econst:.string:_u8x8_d_ssd1306_128x64_noname_fle0_seq$47)
003f606c 00000007 u8x8_d_ssd1306_128x64_noname.obj (.econst:.string:_u8x8_d_ssd1306_128x64_noname_flipp1_seq$47)
003f6073 00000005 u8x8_d_ssd1306_128x64_noname.obj (.econst:.string:_u8x8_d_ssd1306_128x64_noname_powersave0_seq$47)
003f6078 00000005 u8x8_d_ssd1306_128x64_noname.obj (.econst:.string:_u8x8_d_ssd1306_128x64_noname_powersave1_seq$47)
003f607d 00000001 --hole --[填充= 0]
003f607e 00000004 u8g2_setup.obj (.econst:_u8g2_CB_r0)
003f6082 00000004 rts2800_ml.lib:s_scalbn.obj (.econst)
.cinit 0 003f6086 00000089
003f6086 0000006f (.cinit)
003f60f5 0000000e rts2800_ml.lib:exit.obj (.cinit)
003f6103 00000005 (.cinit:_lock)
003f6108 00000005 (.cinit:__unlock)
003f610d 00000002 --hole --[填充= 0]
RAMfuncs 0 003f7000 00000004运行 ADDR = 00000050
003f7000 00000004 F2802x_usdelay.obj (ramfuncs)
.text 0 003f7004 00000e79
003f7004 000001a5 rts2800_ml.lib:trgdrv.obj (.text)
003f71a9 00000107:LL_div28.obj (.text)
.
)
003f7cf5 0000000e u8g2_d_setup.obj (.text:_u8g2_Setup_ssd1306_i2c_128x64_noname_1)
003f7d03 0000000e rts2800_ml.lib:fd_sub28.obj (.text)
003f7d11 0000000c:epilogue28.obj (.text)
003f7d1d 0000000a u8x8_Byte.obj (.text:_u8x8_Byte_SendByte)
003f7d27 00000009 rts2800_ml.lib:fd_否定28.obj (.text)
003f7d30 00000008 F2802x_sysctrl.obj (.text:_DisableDog)
003f7d38 00000008 F2802x_codestartbranch.obj (.text)
003f7d40 00000007 u8x8_Byte.obj (.text:_u8x8_Byte_EndTransfer)
003f7d47 00000007 u8x8_Byte.obj (.text:_u8x8_Byte_StartTransfer)
003f7d4e 00000006 u8x8_Byte.obj (.text:_u8x8_Byte_SendBytes)
003f7d54 00000006 u8x8_CAD.obj (.text:_u8x8_CAD_EndTransfer)
003f7d5a 00000006 u8x8_CAD.obj (.text:_u8x8_CAD_SendArg)
003f7d60 00000006 u8x8_CAD.obj (.text:_u8x8_CAD_SendCmd)
003f7d66 00000006 u8x8_CAD.obj (.text:_u8x8_CAD_StartTransfer)
003f7d6c 00000005 F2802x_defaultisr.obj (.text:_ADCINT1_ISR)
003f7d71 00000005 F2802x_defaultisr.obj (.text:_ADCINT2_ISR)
003f7d76 00000005 F2802x_defaultisr.obj (.text:_ADCINT3_ISR)
003f7d7b 00000005 F2802x_defaultisr.obj (.text:_ADCINT4_ISR)
003f7d80 00000005 F2802x_defaultisr.obj (.text:_ADCINT5_ISR)
003f7d85 00000005 F2802x_defaultisr.obj (.text:_ADCINT6_ISR)
003f7d8a 00000005 F2802x_defaultisr.obj (.text:_ADCINT7_ISR)
003f7d8f 00000005 F2802x_defaultisr.obj (.text:_ADCINT8_ISR)
003f7d94 00000005 F2802x_defaultisr.obj (.text:_ADCINT9_ISR)
003f7d99 00000005 F2802x_defaultisr.obj (.text:_datalog_ISR)
003f7d9e 00000005 F2802x_defaultisr.obj (.text:_ECAP1_INT_ISR)
003f7da3 00000005 F2802x_defaultisr.obj (.text:_empty_ISR)
003f7da8 00000005 F2802x_defaultisr.obj (.text:_EMUINT_ISR)
003f7DAD 00000005 F2802x_defaultisr.obj (.text:_EPWM1_INT_ISR)
003f7db2 00000005 F2802x_defaultisr.obj (.text:_EPWM1_TZINT_ISR)
003f7db7 00000005 F2802x_defaultisr.obj (.text:_EPWM2_INT_ISR)
003f7dbc 00000005 F2802x_defaultisr.obj (.text:_EPWM2_TZINT_ISR)
003f7dc1 00000005 F2802x_defaultisr.obj (.text:_EPWM3_INT_ISR)
003f7dc6 00000005 F2802x_defaultisr.obj (.text:_EPWM3_TZINT_ISR)
003f7dcb 00000005 F2802x_defaultisr.obj (.text:_EPWM4_INT_ISR)
003f7dd0 00000005 F2802x_defaultisr.obj (.text:_EPWM4_TZINT_ISR)
003f7dd5 00000005 F2802x_defaultisr.obj (.text:_I2CINT1A_ISR)
003f7dda 00000005 F2802x_defaultisr.obj (.text:_I2CINT2A_ISR)
003f7ddf 00000005 F2802x_defaultisr.obj (.text:_illegal ISR)
003f7de4 00000005 F2802x_defaultisr.obj (.text:_INT13_ISR)
003f7de9 00000005 F2802x_defaultisr.obj (.text:_INT14_ISR)
003f7dee 00000005 F2802x_defaultisr.obj (.text:_NMI_ISR)
003f7df3 00000005 F2802x_defaultisr.obj (.text:_PIe_reserved)
003f7df8 00000005 F2802x_defaultisr.obj (.text:_RTOSINT_ISR)
003f7dfd 00000005 F2802x_defaultisr.obj (.text:_SCIRXINTA_ISR)
003f7e02 00000005 F2802x_defaultisr.obj (.text:_SCITXINTA_ISR)
003f7e07 00000005 F2802x_defaultisr.obj (.text:_SPIRXINTA_ISR)
003f7e0c 00000005 F2802x_defaultisr.obj (.text:_SPITXINTA_ISR)
003f7e11 00000005 F2802x_defaultisr.obj (.text:_TINT0_ISR)
003f7e16 00000005 F2802x_defaultisr.obj (.text:_USER10_ISR)
003f7e1b 00000005 F2802x_defaultisr.obj (.text:_USER11_ISR)
003f7e20 00000005 F2802x_defaultisr.obj (.text:_USER12_ISR)
003f7e25 00000005 F2802x_defaultisr.obj (.text:_User1_ISR)
003f7e2a 00000005 F2802x_defaultisr.obj (.text:_User2_ISR)
003f7e2f 00000005 F2802x_defaultisr.obj (.text:_User3_ISR)
003f7e34 00000005 F2802x_defaultisr.obj (.text:_User4_ISR)
003f7e39 00000005 F2802x_defaultisr.obj (.text:_USER5_ISR)
003f7e3e 00000005 F2802x_defaultisr.obj (.text:_USER6_ISR)
003f7e43 00000005 F2802x_defaultisr.obj (.text:_USER7_ISR)
003f7e48 00000005 F2802x_defaultisr.obj (.text:_USER8_ISR)
003f7e4d 00000005 F2802x_defaultisr.obj (.text:_USER9_ISR)
003f7e52 00000005 F2802x_defaultisr.obj (.text:_WAKEINT_ISR)
003f7e57 00000005 F2802x_defaultisr.obj (.text:_XINT1_ISR)
003f7e5c 00000005 F2802x_defaultisr.obj (.text:_XINT2_ISR)
003f7e61 00000005 F2802x_defaultisr.obj (.text:_XINT3_ISR)
003f7e66 00000005 F2802x_defaultisr.obj (.text:_rsvd_ISR)
003f7e6b 00000005 u8x8_CAD.obj (.text:_u8x8_CAD_SendData)
003f7e70 00000005 u8x8_gpio.obj (.text:_u8x8_gpio_call)
003f7e75 00000002 u8g2_font.obj (.text:_u8g2_font_calc_vref_font)
003f7e77 00000002 u8x8_setup.obj (.text:_u8x8_dummy_CB)
003f7e79 00000002 rts2800_ml.lib:pre_init.obj (.text)
003f7e7b 00000001:_lock.obj (.text)
003f7e7c 00000001:startup.obj (.text)
econst.2
0 003f7e7e 00000101
003f7e7e 00000100 F2802x_pievect.obj (.econst:_PieVectTableInit)
003f7f7e 00000001 u8x8_cd.obj (.econst)
codestart
0 003f7ff6 00000002
003f7ff6 00000002 F2802x_codestartbranch.obj (codestart)
.stack 1 00000400 00000200未初始化
00000400 00000200 --孔--
.ebss.2 1 00000600 00000200未初始化
00000600 00000160 rts2800_ml.lib:defs.obj (.ebss)
00000760 00000020 OLED.obj (.ebss:_buffer 1美元2)
00000780 00000080 u8g2_d_memory.obj (.ebss:_Buf$4美元8)
DevEmuRegsFile
1 00000880 00000004未初始化
00000880 00000004 F2802x_GlobalVariableDefs.obj (DevEmuRegsFile)
一
一
I2caRegsFile
1 00007900 00000022未初始化
00007900 00000022 F2802x_GlobalVariableDefs.obj (I2caRegsFile)
.esysmem 1 00008000 00000400未初始化
00008000 00000001 rts2800_ml.lib:memory.obj (.esysmem)
00008001 000003ff --孔--
PartIdRegsFile
1 003d7fff 00000001未初始化
003d7fff 00000001 F2802x_GlobalVariableDefs.obj (PartIdRegsFile)
CsmPwlFile
1 003f7ff8 00000008未初始化
003f7ff8 00000008 F2802x_GlobalVariableDefs.obj (CsmPwlFile)
.pinit 0 003f7000 00000000未初始化
.reset 0 003fffc0 00000002 DSECT
003fffc0 00000002 rts2800_ml.lib:boot28.obj (.reset)
向量0 003fffc2 00000000 DSECT
模块总结
模块代码初始化数据未初始化数据
---- ------------ ----------
。
F2802x_GlobalVariableDefs.obj 0 1052
F2802x_pievect.obj 17 256 0
F2802x_defaultisr.obj 255 0
OLED.obj 193 0 32.
F2802x_sysctrl.obj 187 0 0
main.obj 155 0 0
F2802x_cputimers.obj 105 0
F2802x_PIECTRL.obj 31 0
F2802x_codestartbranch.obj 10 0
F2802x_usdelay.obj 8 0
+-++------------------ +--- --------------- --------------- +
共计:961 256 1084
中国证监会
u8x8_d_ssd1306_128x64_noname.obj 134 97 0
u8x8_CAD.obj 168 1 0
u8g2_d_memory.obj 0 0 128
u8g2_hvline.obj 123 0 0
u8g2_setup.obj 106 4 0
u8g2_ll_hvline.obj 86 0
u8x8_display.obj 49 0 0
u8x8_setup.obj 48 0 0
u8x8_Byte.obj 30 0 0
u8g2_d_setup.obj 14 0 0
u8x8_GPIO_OBJ 5 0 0
u8g2_font.obj 2 0 0
+-++------------------ +--- --------------- --------------- +
共计:765 102 128
C:\Users\Baghli\AppData\Local\Temp\
{3823F456-BC81-40BA-B9B5-5BFE48E0F88E}0 148 0
+-++------------------ +--- --------------- --------------- +
总计:0 148 0
电子邮件:/ti/ccsv7/tools/compiler/ti-cgt-c2000_16.9.3.LTS/lib/rts2800_ml.lib
trgdrv.obj 421 0 0
一
[引用用户="Lotfi"]
现在,通过优化级别4到大小(0),而不是速度,我获得了更好的结果,它只符合:
#10247-D 创建不带 SECTIONS 规范的输出段".CIO"
[/报价]
它似乎仍然无法分配几个段:
.cio 0 00000000 00000120无法分配
.ebss.1 0 00000000 00000120分配失败
您需要检查链接器命令文件、看看是否可以将这些段移动到另一个具有可容纳该段的空间的存储器区域。
另请查看 此链接 以获取有关解决此问题的其他提示。
如果您不熟悉 TI 编译器工具和链接器命令文件语法、请查看 本文 、其中提供了不同部分以及不同分配语法的含义的良好概述。
[报价用户="Lotfi">我有这种情况
但它为您提供了您看到的地图好的、列出的器件类型正确、但映射文件仅列出3K 个 SARAM 字和8K 个闪存字。
项目中包含哪些链接器命令文件(.cmd)?
CCS 工程选项的屏幕截图仅显示 F2802x_Headers_nonBIOS.cmd 链接器命令文件、我认为该文件不包含器件特定的内存量。
让我总结一下到目前为止的问题:
lib U8g2需要链路垃圾收集器。 它是 Arduino gcc 工具链中的标准功能。 我们可以使用低于1K 的 RAM 运行 U8g2、如所述
https://github.com/olikraus/u8g2/issues/549#issuecomment-385230689
现在我从 F28027F 迁移到 F28069M:同样的问题
Oled69M_V0.2.zip
https://github.com/blotfi/c2000_u8g2
是的,主 cmd 文件是: f28069F_ram_lnk.cmd 在 motorware 项目中找到
但我也尝试了: e:\ti\c2000\C2000Ware_1_00_03_00\device_support\f2806x\con\cmd\f28069M_ram_lnk.cmd
同一问题
实际上、我不需要更多的存储器或段目标、而是链接垃圾收集器功能、因此不会孤立需要存储器的未使用过程。
Lotfi、
正如 Chester 提到的、TI 工具中 GCC 链接垃圾收集器的等效选项是-gen_func_subsections 和-gen_data_subsections 选项。 如果仅添加该选项仍然无法获得所需的分配、则可能需要对链接器命令文件进行一些额外的手动调整(例如、允许段适合其分配的存储器区域)和/或代码优化。
[引用 USER="Chester Gillon">查看链接器映射文件会发现两个问题:
已选择 一 个 TMS320F280200器件(8K 字的闪存和3K 字的 SARAM)、此器件的内存少于实际 的 TMS320F28027F (64K 字的闪存和12K 字的 SARAM) 在 LAUNCHXL-F28027F 上。我下载 了 https://github.com/blotfi/c2000_u8g2/blob/master/%23oled27f_V0.2.zip 并 确定了链接器映射为什么仅显示8K 闪存字和3K SARAM 字。 F2802x_general_flash.cmd 文件被链接至项目。
如果您在 CCS Project Explorer 中右键点击链接的 F2802x_generic_flash.cmd 文件、请选择 Properties、然后在 Resource 选项卡上选择 Link Location。
在退出链接位置上、更改 F2802x_general_flash.cmd 文件名:
到 F28027.cmd:
然后、这将允许链接器在 TMS320F28027F 中使用闪存的32K 字和 SARAM 的6K 字。
谢谢切斯特
但我使用正确的 cmd 文件移动到 F28069M、但问题是 CCS 中不存在或未激活链路垃圾收集器
如中所述
https://e2e.ti.com/support/development_tools/code_composer_studio/f/81/p/685102/2525556#2525556
因为 DE 代码适合使用 GCC 链接垃圾收集器的小型 Arduino 微型、但不适用于69M 的大内存...
[引用 user="Lotfi">但问题在于 CCS 中不存在或未激活的链路垃圾收集 器如何构建 u8g2库?
GitHub 页面上的#Oled69M_V0.2.zip 和#oled27f_V0.2.zip 似乎注释掉了对 u8g2库的调用。
我尝试使用 TI v16.9.3.LTS C2000编译器和设置"将每个函数放在单独的子段中(--gen_func_subsections、-mo)"和"将结构和数组放在单独的子段中(-- Gen_data_subsections)"将运行时模型选项更改为"on"确实允许链接器删除目标文件中未使用的函数和数据。