软件

Keil使用$Sub$$与$Super$$函数补丁功能

使用$Sub$$main定义一个新的功能函数,此函数会在原int main(void)前执行,在函数执行完成的地方调用$Super$$main方法将直接跳转回原int main(void)函数执行。这种执行方法,就可以在系统KEIL MDKMAIN函函数动前,调用一个函数名称为int $Sub$$main补丁函数。

int $Sub$$main(void) {

    extern int main(void);
    extern int $Super$$main(void);

    // SystemInit();                                        /* 不需要再次初始化系统时钟 */
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);         /* 设置系统中断优先级分组4 */

#if defined(__CC_ARM)
    $Super$$main();
#elif defined(__ICCARM__) || defined (__GNUC__)
    main();
#endif

    return 0;
}

/**
  * @brief  This function main.
  * @param  None
  * @retval None
  */
int main(void) {

    //创建首个任务。
    xTaskCreate(start_task,                                 // 任务函数
                "ST",                                       // 任务名称
                START_SIZE,                                 // 堆栈大小(字)
                NULL,                                       // 传递给任务函数的参数
                START_PRIO,                                 // 任务优先级
                &start_handle);                             // 任务句柄

    vTaskStartScheduler();                                  // 开启任务调度

    while(1);
}

参考文献:

1.ARM Compiler

2.在 __CC_ARM 编译器环境下,使用$Sub$$ 与 $Super$$ 的“补丁”功能

3.用$Super$$和$Sub$$对函数进行重定义

回复

This is just a placeholder img.