ucos的中断函数
void key_irq(void *context,unsigned long id){
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL();
OSIntNesting++;
OS_EXIT_CRITICAL();
if(OSIntNesting==1)
{
OSTCBCur->OSTCBStkPtr = SP;
usleep(10000);
if(IORD_ALTERA_AVALON_PIO_DATA(PIO_KEY_BASE))
{
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,0x0e);
usleep(1000000);
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE,0x03);
usleep(1000000);
}
IOWR_ALTERA_AVALON_PIO_IRQ_MASK(PIO_LED_BASE,1);
OSIntExit();
}
以上写的对不对,SP怎么赋值,直接写SP好像不对,要先定义,蓝色是用户代码,现在有问题,不知道中断函数写的对不?
ucos中断这么写就行了,OSTCBCur->OSTCBStkPtr = SP; 这句完全没必要,不知道你是从哪里看来的。
void key_irq(void *context,unsigned long id)
{
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL();
OSIntNesting++;
OS_EXIT_CRITICAL();
//你的代码
OSIntExit();
}
路过。。。。。 赞同2楼
页:
[1]