请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430-GCC-opensource 主题中讨论的其他器件:MSP430FR5994、 MSP430FR2476、 MSP430FR2676、 MSP430FR50431、 MSP430FR5043、 MSP430FR5962、 MSP430FR5964、 MSP430FR5992、 MSP430FR59941、 MSP430FR6005、 MSP430FR6007、 MSP430FR6035、 MSP430FR60371、 MSP430FR6037、 MSP430FR60431、 MSP430FR6043、 MSP430FR6045、 MSP430FR60471、 MSP430FR6047
您好!
这个使用 MSP430 GCC 9.2.0.50 (在 CCS Cloud 和我们的计算机上)为 MSP430FR5994编译的最小示例
无法使 LED 闪烁。
#include int main (void) { WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 P1DIR |= BIT0; PM5CTL0 &=~LOCKLPM5; TA4CTL = MC_STOP | TACLR; TA4CCR0 = 31250;//每秒4次 TA4CCTL0 = CCIE;// TA4CCR0中断被启用 TA4CTL = tassel_SMCLK | ID_8 | MC_UP;// SMCLK/8、向上计数模式 _enable_interrupt (); 执行{}while (1); 返回0; } void __interrupt_vec (TIMER4_A0_vector) Timer4_A0_ISR (void){ P1OUT ^= BIT0; }
与 include/目录中的其他链接器脚本进行比较后、默认链接器脚本 msp430fr5994.ld 被认为是原因、
因为中断例程被放置在".lowtext"段中、然后进入 RAM 中的某个位置、但预计位于 FRAM 中。
建议的修复似乎会将".lowtext"放置在正确的存储器部分中。
--- msp430-gcc-9.2.0.50/include/msp430fr5994.ld
++ fixed_msp430fr5994.ld
@@-415,29+415,29 @@
.low-text:
{
。 =对齐(2);
*(.lower.text.*.lower.text)
}> FRAM
.text:
{
提供(_start =.);
。 =对齐(2);
保留(*(sort (.crt_*)))
。 = align (2);
-*(.low.text。*.low.text)
+ Keep (*(.lowtext))
。 =对齐(2);
*(.text .stub .text。*.GNU.linkone.t*.text:*)
/*请参阅.rodata 部分中有关我们没有此行的原因的注释:
*(.ise.text.*.oe.text)
*
保留(*(.text.*个性*))
/*.GNU.warning 段由 ELF32.em 专门处理。 *
*(.GNU.warning)
*(.interp .hash .dynsym .dynstr .GNU.version*)
提供(__etext =.);
对此有任何反馈吗?
此致
Petr