sde_arm9 发表于 2010-10-27 08:19:53

freertos的中断到底如何写、

一直没弄清楚freertos的中断如何写,入口必须使用汇编吗?
没用汇编写也能运行?

求解!!!


void xPortSysTickHandler( void )
{
unsigned long ulDummy;

        /* If using preemption, also force a context switch. */
        #if configUSE_PREEMPTION == 1
                *(portNVIC_INT_CTRL) = portNVIC_PENDSVSET;       
        #endif

        ulDummy = portSET_INTERRUPT_MASK_FROM_ISR();
        {
                vTaskIncrementTick();
        }
        portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy );
}
/*-----------------------------------------------------------*/

void xPortUSART1rxHandler(void)
{
unsigned long ulDummy;
static unsigned char test;
static unsigned char n;
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
        ulDummy = portSET_INTERRUPT_MASK_FROM_ISR();
        {
                test=USART_ReceiveData(USART1);
                if(++n>4){
                        n=0;
                        //xQueueSendFromISR(Queue1,&test,&xHigherPriorityTaskWoken);
                        USART_SendData(USART1,test);       
                }
        }
        portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy );
}

zh1112ou 发表于 2011-8-18 12:09:38

关注!遇到同样问题。

weidadejang 发表于 2015-9-29 11:53:59

我也帮你顶!我也碰到这个问题不知道你解决了没有!望说个方法!

trey21ic 发表于 2015-9-29 12:58:53

中断中调用了内核系统函数的按照如下方法处理:

      static portBASE_TYPE xHigherPriorityTaskWoken;
       ......
       xHigherPriorityTaskWoken = pdFALSE;
       xxxxFromISR(xxx,xxxx,&xHigherPriorityTaskWoken);
       ......
       portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );


如果中断中没有调用内核系统函数,则不需要做特别处理。
页: [1]
查看完整版本: freertos的中断到底如何写、