硬汉嵌入式论坛

 找回密码
 立即注册
查看: 10744|回复: 16
收起左侧

[FreeRTOS] freeRTOS中如何写按键中断啊?怎么设置按键中断的优先级啊?

[复制链接]

2

主题

13

回帖

2

积分

新手上路

积分
2
发表于 2015-2-13 14:37:10 | 显示全部楼层 |阅读模式
如题,
freeRTOS中如何写按键中断啊?怎么设置按键中断的优先级啊?
能不能详细介绍一下,按键的优先级和task的优先级怎么设置啊?看的一头雾水。
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-2-13 16:35:23 | 显示全部楼层
求指教啊!!!!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2015-2-13 20:39:04 | 显示全部楼层
1.  中断按照你裸机时的中断方式写就行,需要中断级任务切换的话,就加上这个函数。
2.  中断优先级在裸机的时候怎么设置,在FreeRTOS里面还怎么设置。
3.  任务优先级的设置也比较简单,在一个.h文件里面配置下就行。

参考实例: 5-消息队列(中断).zip (14.19 MB, 下载次数: 8695)
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-2-15 23:24:16 | 显示全部楼层
没看到例子程序里有中断啊,能写个按键中断的例程么,
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-2-15 23:24:58 | 显示全部楼层
还不是很能理解啊,比较笨
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-2-27 22:17:18 | 显示全部楼层

回 eric2013 的帖子

eric2013:
1.  中断按照你裸机时的中断方式写就行,需要中断级任务切换的话,就加上这个函数。
2.  中断优先级在裸机的时候怎么设置,在FreeRTOS里面还怎么设置。
3.  任务优先级的设置也比较简单,在一个.h文件里面配置下就行。

参考实例:
.......
这是我写的代码:

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Ïß·¹ÒÆðλ
}
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-2-27 22:21:46 | 显示全部楼层
还有就是如果中断中,导致有高优先级的任务退出阻塞,怎么在退出前,强制进行一次任务切换呢?
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-2-27 22:46:50 | 显示全部楼层
led + freeRTOS.zip (2.97 MB, 下载次数: 94)

楼主帮忙看一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2015-2-28 08:20:49 | 显示全部楼层
不可以这么做按键滤波,中断里面不能有延迟函数,中断里面的代码执行时间必须越小越好,按键滤波方案,你可以参考我们的。
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-2-28 08:56:09 | 显示全部楼层

回 eric2013 的帖子

eric2013:不可以这么做按键滤波,中断里面不能有延迟函数,中断里面的代码执行时间必须越小越好,按键滤波方案,你可以参考我们的。 (2015-02-28 08:20) 
你这样做是不是就没用到中断了。如果用中断,并且要滤波要怎么做呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2015-2-28 09:02:18 | 显示全部楼层

Re:回 eric2013 的帖子

who_who:

你这样做是不是就没用到中断了。如果用中断,并且要滤波要怎么做呢?

看这个例子:
1.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2015-2-28 09:03:36 | 显示全部楼层
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-2-28 09:04:06 | 显示全部楼层
ucos中中断里面加了两个函数,退出中断要进行一次任务切换,freertos中怎么做啊,eric??
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-2-28 09:44:40 | 显示全部楼层

回 eric2013 的帖子

eric2013:教程和例子下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=1285 (2015-02-28 09:03) 
看你写的FreeRTOS的工程例子,都不怎么用中断的方式啊,是这样做比较好吗??
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2015-2-28 19:00:42 | 显示全部楼层

回 who_who 的帖子

who_who:看你写的FreeRTOS的工程例子,都不怎么用中断的方式啊,是这样做比较好吗??
(2015-02-28 09:44)
使用中断越少越好。
中断在一定程度上面会影响系统的稳定性,特别是使用RTOS的情况下,当然,使用中断的话好处也很多,这个要权衡好。
回复

使用道具 举报

2

主题

13

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2015-3-2 17:08:39 | 显示全部楼层

回 eric2013 的帖子

eric2013:使用中断越少越好。
中断在一定程度上面会影响系统的稳定性,特别是使用RTOS的情况下,当然,使用中断的话好处也很多,这个要权衡好。 (2015-02-28 19:00) 
但是按键的话,如果用中断不是比扫描方式更好么?
扫描任务的话,不是一直要占用Cpu么?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107031
QQ
发表于 2015-3-2 18:48:19 | 显示全部楼层

回 who_who 的帖子

who_who:但是按键的话,如果用中断不是比扫描方式更好么?
扫描任务的话,不是一直要占用Cpu么? (2015-03-02 17:08) 
这个就是所说的,使用中断的好处。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-15 00:33 , Processed in 0.222345 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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