请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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