天马 发表于 2012-5-7 15:27:08

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好像不对,要先定义,蓝色是用户代码,现在有问题,不知道中断函数写的对不?

schwarz 发表于 2012-5-7 15:34:04

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();
}

orange-208 发表于 2012-5-7 17:47:19

路过。。。。。

deny 发表于 2012-5-7 19:41:53

赞同2楼
页: [1]
查看完整版本: ucos的中断函数