#10099-D program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment/blocking fails for section ".switch" size 0x564 page 0. Available memory ranges:

2837xS_FLASH_lnk.cmd

错误解释:

  1. #10099-D: TI 编译器的链接器诊断代码。
  2. program will not fit into available memory: 这是问题的核心。你的整个程序(代码、数据、堆栈等)的大小超过了你正在使用的微控制器 (2837xS) 的总内存容量。
  3. or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment/blocking fails for section ".switch" size 0x564 page 0.:
    • section ".switch".switch 是一个特定的链接器节 (section)。它通常包含了 switch 语句的跳转表 (jump table)。当你的代码中有 switch 语句时,编译器会生成一个表,用来快速查找根据 switch 变量的值应该跳转到哪个代码位置。
    • size 0x564: 这个 .switch 节需要 0x564 字节(十六进制)的内存空间。
    • page 0: 指明了这个节需要被放置在内存的第 0 页。
    • placement with alignment/blocking fails for section ".switch": 链接器尝试将这个 .switch 节放置到内存的某个区域,但由于内存碎片、对齐要求或者内存范围的限制,导致它无法成功放置。
    • program will not fit into available memory: 这部分原因可能是由 .switch 节无法放置引起的,也可能是整个程序整体过大,包含了 .switch 节在内的所有节都无法安排进有限的内存。
  4. Available memory ranges:: 这一部分 原本应该列出 你的设备可用内存的各个区域(例如,FLASH, RAM),但在这里信息不完整,只显示了“Available memory ranges:”。这可能意味着链接器在尝试分配时遇到了问题。
  5. 2837xS_FLASH_lnk.cmd: 这是你的链接器命令文件 (.cmd 文件)。

解决步骤:1.在CCS菜单栏View中的Memory Allocation来查看flash中内存占用的大小。

可以看到FLASHC已经快占满了

2.然后修改2839Xs_FLASH_lnk.cmd 中的 FLASHC

给FLASHC扩充1000byte

3.保存2839Xs_FLASH_lnk.cmd的修改,再次编译 ,问题解决。

Logo

一座年轻的奋斗人之城,一个温馨的开发者之家。在这里,代码改变人生,开发创造未来!

更多推荐