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.
您好!
在 我的项目中使用 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 应用于宏所使用的函数。