找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2246|回复: 0
打印 上一主题 下一主题
收起左侧

无RTOS编程出现的问题

[复制链接]
跳转到指定楼层
楼主
ID:99624 发表于 2015-12-27 03:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
                        有时候用AVR,51系列等单片机在无操作系统的情况下编程会遇到这种情况,伪代码如下:
void main()
{
主循环:
while(1)
{
//耗时较大的函数
BigWork();
//按键处理
Button();
//显示结果
Display();
}


由于有耗时较大的函数存在,所以在BigWork里面的时间太长以致影响了Button()的实时性,因为有时按键引脚的电平变化都已经结束,但还在BigWork里面没出来,Button()无法扫描到电平变化


现在只知道使用中断来打断BigWork
但中断引脚很有限,但按键却很多,例如最简单的电子闹钟也起码有3、4个按键
所以只能每个按键引线到同一个中断引脚,再分别引线到不同的IO端口,进入中断服务后再用扫描法看看哪个按下了。

伪代码如下:
//任何按键按下都会引发该中断
interrupt0_service()
{
//马上记录下此时连接按键的端口的状态
PORT_State=PORT;
//判断哪个按键按下并处理相应事宜
ScanButton(PORT_State);
}


//该中断负责显示
interrupt1_service
{
Display();
}


void mian()
{
//初始化中断的伪代码就省略了

while(1)
{
BigWork();
}
}
看上去好像没什么问题,但假设ScanButton的耗时也很大,中断0的服务就会很久都不能结束,除了堵住了优先级低于中断0的其他中断之外,还有没有什么潜在隐患呢?



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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