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 );
} 关注!遇到同样问题。 我也帮你顶!我也碰到这个问题不知道你解决了没有!望说个方法! 中断中调用了内核系统函数的按照如下方法处理:
{
static portBASE_TYPE xHigherPriorityTaskWoken;
......
xHigherPriorityTaskWoken = pdFALSE;
xxxxFromISR(xxx,xxxx,&xHigherPriorityTaskWoken);
......
portEND_SWITCHING_ISR( xHigherPriorityTaskWoken );
}
如果中断中没有调用内核系统函数,则不需要做特别处理。
页:
[1]