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.

[参考译文] MSPM0L1304:输出中出现"printf"错误

Guru**** 2386620 points
Other Parts Discussed in Thread: MSPM0L1304, MSPM0G3507
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1471347/mspm0l1304-error-in-the-printf-output

器件型号:MSPM0L1304
主题中讨论的其他器件: MSPM0G3507

工具与软件:

您好!
我将使用微控制器 MSPM0L1304和 IDE CCS 20.0.1。
我想生成一个"printf ("...");"输出并在控制台中显示。
为此,我必须包括 软件库。
然后、我收到以下错误消息:



[234]Building target:"umschaltbox.sw.pcb-050401.out"
[235]Inchinging
[236]"C:/ti/ccs2001/ccs/tools/compiler/ti-cgt-armllvm_4.0.1.LTS/bin/tiarmclang.exe /ti/mspm0_sdk_2_03_00_07/source /ti/ccs2001/ccs/tools/compiler/ti-cgt-armllvm_4.0.1.LTS/lib @"syscfg/device.opt"-March=thumbv6m -mcpu=cortex-m0plus.mfloat-abi=soft -mlittle-endian -mO2 -gdwarf-3 -wl /Users/christian.zwingmann/Documents/Git/Umschaltbox_SW/umschaltbox.sw.pcb-050401/Debug/syscfg /syscfg/ti_msp_dl_config.o  
[237]makefile:140:用于目标"umschaltbox.sw.pcb-050401.out"的配方失败
[238]Warning #10210-D:创建默认大小为0x800的".sysmem"段;使用-heap 选项更改默认大小
[239]"syscfg/device_linker.cmd"、第62行:错误#10099-D:程序将无法放入可用存储器中、或者该段包含一个调用站点、该调用站点需要无法为此段生成蹦床函数、或者该段包含填充函数。 针对段".bss"大小0x2e5运行对齐放置失败。  可用存储器范围:
[240]  SRAM        大小:0x800       未使用:0x0         最大空洞:0x0       
[241]"syscfg/device_linker.cmd"、第61行:错误#10099-D:程序将无法放入可用存储器中、或者该段包含一个调用站点、该调用站点需要无法为此段生成蹦床函数、或者该段包含填充函数。 针对段".data"大小0x1e4运行带对齐的放置失败。  可用存储器范围:
[242]  SRAM        大小:0x800       未使用:0x0         最大空洞:0x0       
[243]"syscfg/device_linker.cmd"、第64行:错误#10099-D:程序将无法放入可用存储器中、或者该段包含一个调用站点、该调用站点需要无法为此段生成蹦床函数、或者该段包含填充函数。 针对段".stack"大小0x100运行带对齐的放置失败。  可用存储器范围:
[244]  SRAM        大小:0x800       未使用:0x0         最大空洞:0x0       
[245]错误#10010:链接过程中遇到错误;未生成"umschaltbox.sw.pcb-050401.out"
[246]tiarmclang:错误:tiarmlnk 命令失败、退出代码1 (使用-v 查看调用)
[247]gmake[1]:***[umschaltbox.sw.pcb-050401.out]错误1.
[248]Undertale [第248]Undert
[249]gmake:***[All]错误2.

[250]****构建完成

我在做什么错?

此致、Christian

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

    我看到同样的事情。 (我导入了一个"empty"项目,并插入了一个 printf()调用。

    链接器要告诉您的是它没有在 device_linker.cmd 中找到".sysmem"段定义、但我可以  在这里看到定义(".sysmem:> SRAM")。 我被空白和链接器选项骗了、我确信链接器正在读取该行。

    如果你想知道:它现在只出现在 printf ()( CIO ?)中的东西 使用此段、而以前没有执行任何操作。 一种变通方法是使用 snprintf()并写入 UART (例如)(我认为它不太方便)。

    抱歉、我没有答案。 也许链接器人们会这样做?

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

    在 MSPM0G3507上执行 EmptyProject/add printf ()工作正常。

    我看不到"tinyprintf"选项。

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

    Keith:您收到链接器的任何警告吗? G3507或 L1306有一个。

    在这些 MCU 上、链接步骤成功、因为有足够的 SRAM 来容纳"发明的".sysmem 段以及其他所有内容。 在 L1304上、这个".sysmem"占据了所有 SRAM、并且这些数据在之后逐渐下降。

    [编辑:细微澄清。]

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

    [7]调用:ARM 链接器
    [8]"C:/ti/ccs2000/ccs/tools/compiler/ti-cgt-armllvm_4.0.1.LTS/bin/tiarmclang.exe g350"@"syscfg/device.opt" -March=thumbv6m -mcpu=cortex-m0plus -mfloat-abi=soft -mlittle-endian -mbig-O2 -gdwarf-3 /Users/kbarkley/workspace_ccstheia/empty_mspm0g3507_nortos_ticlang/Debug/syscfg -wl、-m"empty_mspmspm0g3507_nortos_ticl_ticlang.map"/ti/ccs2000/ccs/tools/compiler/ti-cgt-armllvm_4.0.1.LTS/lib -/ti/mspm0_sdk_2_03_00_07/source /syscfg/ti_msp_dl_config.o  


    [9]警告#10210-D:创建默认大小为0x800的".sysmem"段;使用-heap 选项更改默认大小


    [10]已完成构建目标:"empty_mspm0g3507_nortos_ticlang.out"

    只是默认 sysmem 大小的错误。 不确定为什么我无法复制和粘贴彩色文本。

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

    另一种解决方法出现在消息中:如果我将"Project->Properties->Tools->Linker->Basic->Heap size"设置为16、不仅.sysmem 段大小设置为16、我也不会收到警告(!)。 去图。

    对基督徒来说:这是一个变通办法,而不是一个解决办法。 在我的构建中、看起来.sysmem 只需要为16字节、但您也许(或者不需要)需要稍微采用这个数字来实现这一点。

    [编辑:但我也没有获得任何 printf [CIO]输出。 我 已经有很多年没有使用过这个功能了、所以可能是我错了。]

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

    你可能需要一个豪华的或确保你不会落入到最后的主。 我认为调试器需要时间来意识到要打印 stdio。

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

    如果我将堆大小设置为256、则不会获得 CIO 输出、但如果我将其设置为512、则会获得 CIO 输出。 我想所需的大小介于两者之间。 设置堆大小实际上是修复方法。 原始海报将不得不决定是否  值得为 printf()放弃0.5KB 的 SRAM。

    我想我看到这里发生了什么:似乎 printf()(或者可能是 CIO 适当的)使用 malloc ,它使用".sysmem",链接器知道它的大小 (不是输入段的大小)、因此它会创建具有更大大小的段。

    警告消息看起来与链接器有关"creating section "我 误读了它。 这一信息的重点是"默认大小"、这确实是相当大的。

    [编辑:固定的混乱句子。]

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

    嗨、 、  和 

    我不建议在 L1306中使用默认 printf、因为它只有4KB RAM。

    ---------------

    下面是一个 tinyprintf 选项:它可用于 G 和 L 系列。 并且不需要堆。

    e2e.ti.com/.../3681.TinyPrintf_5F00_uart_5F00_rw_5F00_M0G3507_5F00_nortos_5F00_ticlang.zip

    本演示使用 UART 输出日志。

    现在、我们没有 tinyprintf 输出用于调试端口演示。

    ~您找到了调试日志端口接口、我很高兴收到您的消息

    此致、

    Helic

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

    我还应该在这里提到的是、我发现 printf (或者至少 snprintf)也是堆栈 HOG。 我忘记了确切的数字、但我发现我写入的注释(对于 C1104)指出"#define USE_printf 0 // 600b of stack is too m."。 这是对 CIO 要求之外的额外费用。

    [编辑:添加了一些上下文。]