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.

[参考译文] TMDSCNCD28335:使用链接器文件的 F28335 DELAY_US 问题"F28335.cmd"

Guru**** 2538930 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1110121/tmdscncd28335-f28335-delay_us-issue-using-linker-file-f28335-cmd

器件型号:TMDSCNCD28335

您好!  

在   我的项目中使用 DELAY_US 宏时遇到问题。  

这只是一个简单的闪烁项目、让环境正常工作。

int main(void)
{
    int i = 0;
    InitSysCtrl();
    Gpio_select();
    DINT;
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();
    for (i=0; i<10;i++)
    {
        GpioDataRegs.GPATOGGLE.bit.GPIO31 = 0x1;
        DELAY_US(10000L);
    }
	return 0;
}

当我使用链接器文件 28335_RAM_lnk.cmd 时、DELAY_US 宏 正在工作。

但是、使用链接器文件 F28335.cmd 执行宏会导致一个非法的 ISR 函数:  

//
// ILLEGAL_ISR - Illegal operation TRAP
//
interrupt void 
ILLEGAL_ISR(void)
{..}

我的错在哪里?  

我将使用以下组件:  

Windows 10 Enterprise 64位内部版本17763

Code Composer Studio 11.1。

C2000编译器 TI v21.6.0.LTS

对于 F28335:  

扩展坞 USB-EMU TXN100

F28335控制卡版本2.2  

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

    该宏应该从 RAM 执行、而不是从闪存执行。 请在运行时将函数复制到 RAM、在 RAM 外执行。 您可以使用如下所示的 Memcopy 函数:

    // The  RamfuncsLoadStart, RamfuncsLoadEnd, and RamfuncsRunStart
    // symbols are created by the linker. Refer to the F28335.cmd file. 
    
       MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
    

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

    您需要使用 pragma 将此宏复制到 RAM。 只需将 pragma 应用于宏所使用的函数。  

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

    感谢你的帮助。