FreeRTOS中如何写硬件中断程序啊?
385 FreeRTOS 嵌入式
分享
FreeRTOS中如何写硬件中断程序啊?比如说按键中断,怎么写?
能给个具体的例子分析么??
感激不尽
0
6 天前   评论 分享淘帖 邀请回答 举报

相关问题

9个回答
这是我写的代码:这样可以吗?
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???·??????
}
楼主,帮我看下程序,按键中断怎么写,能帮我看看嘛?led + freeRTOS.zip (2.97 MB )
//systick中断服务函数,使用ucos时用到
void SysTick_Handler(void)
{   
OSIntEnter();//进入中断
    OSTimeTick();       //调用ucos的时钟服务程序               
    OSIntExit();        //触发任务切换软中断
}
ucosii的实现方式
与不带ucosii的区别,就是在代码的开头和结束处多了OSIntEnter和OSIntExit2个函数
freertos没用过,应该也是差不多的。
中断只能使用formisr结尾的函数,nvic的组号最好是4
我现在也有此一问,请知道的大侠告知下啊。
FreeRTOS中的中断程序编写与裸机差不多。但有几点要注意:
1、Only API functions that end in "FromISR" can be used in an interrupt.
2、the priority of the interrupt must be set to a value equal to or numerically *higher*
than        configMAX_SYSCALL_INTERRUPT_PRIORITY. 详见http://www.freertos.org/RTOS-Cortex-M3-M4.html
和普通程序一样的写法,按键建一个任务循环扫描不是更简单吗

只有小组成员才能发言,加入小组>>

274个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表