|
在文件app_vect_v5.c中的__vector_table中,如果第14项PendSV Handler如果写成这样:
__root const APP_INTVECT_ELEM __vector_table[] @ ".intvec" = {
{ .Ptr = (void *)__sfe( "CSTACK" )}, /* 0, SP start value. */
__iar_program_start, /* 1, PC start value. */
App_NMI_ISR, /* 2, NMI. */
App_Fault_ISR, /* 3, Hard Fault. */
App_MemFault_ISR, /* 4, Memory Management. */
App_BusFault_ISR, /* 5, Bus Fault. */
App_UsageFault_ISR, /* 6, Usage Fault. */
App_Spurious_ISR, /* 7, Reserved. */
App_Spurious_ISR, /* 8, Reserved. */
App_Spurious_ISR, /* 9, Reserved. */
App_Spurious_ISR, /* 10, Reserved. */
App_Spurious_ISR, /* 11, SVCall. */
App_Spurious_ISR, /* 12, Debug Monitor. */
App_Spurious_ISR, /* 13, Reserved. */
OS_CPU_PendSVHandler, /* 14, PendSV Handler. */
OS_CPU_SysTickHandler, /* 15, uC/OS-II Tick ISR Handler. */
其中OS_CPU_PendSVHandler是ucos中os_cpu_a.asm内的函数。这样写的话运行正常。
但如果通过另一个函数调用,如下:
__root const APP_INTVECT_ELEM __vector_table[] @ ".intvec" = {
{ .Ptr = (void *)__sfe( "CSTACK" )}, /* 0, SP start value. */
__iar_program_start, /* 1, PC start value. */
App_NMI_ISR, /* 2, NMI. */
App_Fault_ISR, /* 3, Hard Fault. */
App_MemFault_ISR, /* 4, Memory Management. */
App_BusFault_ISR, /* 5, Bus Fault. */
App_UsageFault_ISR, /* 6, Usage Fault. */
App_Spurious_ISR, /* 7, Reserved. */
App_Spurious_ISR, /* 8, Reserved. */
App_Spurious_ISR, /* 9, Reserved. */
App_Spurious_ISR, /* 10, Reserved. */
App_Spurious_ISR, /* 11, SVCall. */
App_Spurious_ISR, /* 12, Debug Monitor. */
App_Spurious_ISR, /* 13, Reserved. */
test1, /* 14, PendSV Handler. */
OS_CPU_SysTickHandler, /* 15, uC/OS-II Tick ISR Handler. */
第14项改成test1函数,再在test1函数中调用 OS_CPU_PendSVHandler。这样就不正运行了,不能多任务调度,只是通过一个函数调用一下。怎么就不行了呢。
test1如下:
static void test1 (void)
{
OS_CPU_PendSVHandler();
}
请指点,谢谢 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|