amobbs.com 阿莫电子技术论坛

标题: freertos的中断到底如何写、 [打印本页]

作者: sde_arm9    时间: 2010-10-27 08:19
标题: 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[5];
static unsigned char n;
portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;
        ulDummy = portSET_INTERRUPT_MASK_FROM_ISR();
        {
                test[n]=USART_ReceiveData(USART1);
                if(++n>4){
                        n=0;
                        //xQueueSendFromISR(Queue1,&test[0],&xHigherPriorityTaskWoken);
                        USART_SendData(USART1,test[3]);       
                }
        }
        portCLEAR_INTERRUPT_MASK_FROM_ISR( ulDummy );
}
作者: zh1112ou    时间: 2011-8-18 12:09
关注!遇到同样问题。
作者: weidadejang    时间: 2015-9-29 11:53
我也帮你顶!我也碰到这个问题不知道你解决了没有!望说个方法!
作者: trey21ic    时间: 2015-9-29 12:58
中断中调用了内核系统函数的按照如下方法处理:

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


如果中断中没有调用内核系统函数,则不需要做特别处理。




欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/) Powered by Discuz! X3.4