ARM Cortex-M3初探

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/andrewgithub/article/details/80350750

ARM初探–alias


alias是为老函数,取一个新的名字!
attribute关键字来描述函数,变量和数据类型的属性,用于编译器对源代码的优化

#include <stdio.h>  
int __Hard_Fualt()   
{  
  printf("my func = %s\n",__FUNCTION__);  
  return 0;  
}  

int myFun() __attribute__((alias("__Hard_Fualt")));  
int main()  
{  
  myFun();  
  return 0;  
}  

下面是ARM Cortex-M3中应用alias的一段代码能够简化,程序的编写进程!

void NMI_Handler(void)          __attribute((alias("HardFault_Handler")));    //alias指令别名
void MemManage_Handler(void)    __attribute((alias("HardFault_Handler")));
void BusFault_Handler(void)     __attribute((alias("HardFault_Handler")));
void UsageFault_Handler(void)   __attribute((alias("HardFault_Handler")));
void SVC_Handler(void)          __attribute((alias("HardFault_Handler")));
void DebugMon_Handler(void)     __attribute((alias("HardFault_Handler")));
void PendSV_Handler(void)       __attribute((alias("HardFault_Handler")));

经过使用alias修饰之后,只需定义一个NMI_Handler()函数即可,其它的函数调用的时候就会调用NMI_Handler()函数;

void HardFault_Handler(void)
{
    __disable_irq();
    __set_MSP(__Vectors);
    LEDS_SETUP();
    {
        register int count;
        for (count = 0; count < 5; count++)
        {
            LedRunningOn();
            Delay_ms(250);
            LedRunningOff();

            LedConnectedOn();
            Delay_ms(250);
            LedConnectedOff();

            Delay_ms(1000);
        }
    }
    NVIC_SystemReset();
}

猜你喜欢

转载自blog.csdn.net/andrewgithub/article/details/80350750