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.

[参考译文] TMS320F28375S:CCS 程序堆栈大小问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1235100/tms320f28375s-ccs-program-stack-size-issue

器件型号:TMS320F28375S

尊敬的先生:

  我们是否可以将堆栈地址从 RAM M1更改为其他 RAM 组以增加堆栈大小?

.stack :> RAMM1,<------------------ 更改为 GS6并获得编译错误
RUN_START (_HWI_STKBOTTOM)、
RUN_END (_HWI_STKTOP)、
页= 1.

我们的软件结构中有引导加载程序和主程序。  它们是不同的 CCS 程序项目。

BOOLOADER 位于0x80000处、mainprogram 位于0x88000处。 引导加载程序将检查 DIP 开关、以决定是停留在引导加载程序中还是跳转到主程序。

我们认为、引导加载程序可能会使用太多的局部变量。 我们是否需要在跳转到 mainprogram 之前执行"堆栈复位"?

 ===代码片段===

PLCAppEntryAddr = 0X00088000;//在 SectorE 处运行主程序

if (MODE_0=1 && MODE_1=1)//跳转到 PLC 主应用程序

MSG="\r\n\r\n MCU 引导加载程序跳转至主程序\0";
scib_msg (msg);

if (PLCAppEntryAddr)

{  

        <<do "stack reset">><------------------ 如何在此处进行堆栈复位?
         ((void (*)(void)) PLCAppEntryAddr)();
}

=========== 结束===

Eddie

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

    您好!  

    堆栈必须放置在64K 边界内、因此编译器将引发错误。  

      进行堆栈分配时、您可以尝试使用 RAMGS0、而不是 RAMGS6。

    此致

    Siddharth

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jason 说:
    我们是否需要在跳转到 mainprogram 之前执行"堆栈重置"?

    您的主程序是否会编译并链接 F2837xS_CodeStartBranch.asm? 如果是这样,这将调用启动例程,即_c_init00()。 启动例程负责初始化堆栈。 实际上、它是第一条指令:

    	MOV  	SP,#__stack		; set to beginning of stack space

    因此、我认为、在开始培训之前、也许您不需要更改 SP。

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

    您好!  

    您还可以组合 RAMM0和 RAMM1并将其用于堆栈。

    此致

    Siddharth