嵌入式学习小组
直播中

张琛根

7年用户 167经验值
私信 关注

FreeRTOS中如何写硬件中断程序啊?

受到警告
提示: 作者被禁止或删除 内容自动屏蔽

回帖(9)

梁若莲

2020-7-31 08:47:10
和不带OS一样
举报

胡雄相

2020-7-31 08:53:05
这是我写的代码:这样可以吗?
void NVIC_Configuration(void)
{
// 这个优先级怎么设置啊?
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
}
static void board_init(void)
{
    delay_init();            
    NVIC_Configuration();    
    LED_Init();                
    uart_init(9600);
    EXTIX_Init();    
}
int main(void)
{
    board_init();
    xQueue = xQueueCreate(3, sizeof(xData));
    xTaskCreate(vSenderTask, "sender 1", 1000, (void *)&(xStructData[0]), 2, NULL);  
    xTaskCreate(vSenderTask, "sender 2", 1000, (void *)&(xStructData[1]), 2, NULL);  
    xTaskCreate(vReceiverTask, "receiver", 1000, NULL, 1, NULL);    
    vTaskStartScheduler();
    for(;;);
}
// 按键中断,这样写可以吗?
void EXTI0_IRQHandler(void)
{
   // 利用延时去按键抖动怎么写啊?
    //delay_ms(10);    //????
   // 这样写可以吗
    //vTaskDelay(10/portTICK_RATE_MS);
    if(WK_UP==1)
    {          
        LED0=!LED0;
        LED1=!LED1;        
    }
    EXTI_ClearITPendingBit(EXTI_Line0);  //????EXTI0???·??????
}
void EXTI9_5_IRQHandler(void)
{                        
        //delay_ms(10);   //????        
        //vTaskDelay(10/portTICK_RATE_MS);
        if(KEY0==0)        {
                LED0=!LED0;
        }
          EXTI_ClearITPendingBit(EXTI_Line5);    //????LINE5????????±ê????  
}
void EXTI15_10_IRQHandler(void)
{
    //delay_ms(10);    //????                
    //vTaskDelay(10/portTICK_RATE_MS);
    if(KEY1==0)        
    {
        LED1=!LED1;
    }
    EXTI_ClearITPendingBit(EXTI_Line15);  //????LINE15???·??????
}
1 举报

杨磊

2020-7-31 09:05:53
楼主,帮我看下程序,按键中断怎么写,能帮我看看嘛?led + freeRTOS.zip (2.97 MB )
举报

仇春灵

2020-7-31 09:15:20
//systick中断服务函数,使用ucos时用到
void SysTick_Handler(void)
{   
OSIntEnter();//进入中断
    OSTimeTick();       //调用ucos的时钟服务程序               
    OSIntExit();        //触发任务切换软中断
}
ucosii的实现方式
与不带ucosii的区别,就是在代码的开头和结束处多了OSIntEnter和OSIntExit2个函数
举报

更多回帖

发帖
×
20
完善资料,
赚取积分