本帖最后由 刘前辈 于 2011-2-13 19:41 编辑
贴一个其他论坛上看来的帖子,主要惊奇于machao是研究生导师,还同意于他那句比那些所谓的在XXX上移植成功了XXX系统的帖子要深入的多.
要是年轻10年,我老人家应该去考machao老师的研究生。
【楼主位】 liqu
积分:266
派别:
等级:------
来自:
看了"时间触发嵌入式系统设计",问几个时间触发的问题:请看过的网友及"傻孩子","shaozh"帮忙。
1。书中的"任何时候只有一个中断,即调度器的时标中断",绝对是稳定的,但大家作系统时是否有必要必须这样用?是否能完全满足开发需要?
比如一个系统有上、下位机通讯,9600波特率,按键,128*64LCD显示,常用的作法:
void main(void)
{
main_Init();
while(1)
{
if(ms60_Flag)//60ms一个循环,类似调试器的时标
{
Scan_Key();//查键
Key_Deal();//键处理
LCD();//128*64显示
TXUN_Down();//下位机通讯
ms60_Flag = 0;
}
}
}
void TXUN_Up(void) interrupt 4 using 1//与上位机的通讯中断程序
{
}
void Time0(void) interrupt 1 using 2
{
...
ms60_Flag =1;
}
但这样就违背了一个中断的原则,时标中断有与上位机的通讯中断发生。
大家是怎么处理的,用什么样的程序结构?
2.关于调度器的任务划分问题,有LCD显示的系统里,键处理除与菜单有关,更与显示有关,比如设置不同的参数有不同的界面。键处理Key_Deal()是作为一个任务添加到调度器的吗?那LCD()也是一个单独的任务吗?键处理包含了LCD(),或称要调用LCD(),如何划分这两个任务及处理内容的?LCD()还要在退出键处理时显示通讯传来的数据。
Add_Task(Key_Deal(),1000,1000);
Add_Task(LCD(),0,500);
2008-03-06,09:15:00 资料 邮件 回复 引用回复 ↑↑ ↓↓ 编辑 删除
【1楼】 machao
积分:5726
派别:
等级:------
来自:
支持一下该帖子的作者.我认为他确实经过自己的分析和思考,并提出了2个非常重要的问题.比那些所谓的在XXX上移植成功了XXX系统的帖子要深入的多。
"时间触发嵌入式系统设计"我也看过,感觉上这或许是一个能在8位机上使用的,编写稍微复杂系统软件的方式,含有OS的基本思想和方法,但比OS要小,在小系统中能实际的应用.
问题在于在这个"时间触发嵌入式"的系统中,其它中断的使用与时标中断的矛盾.在OS中,也需要使用一个T/C,产生任务切换的时标,其它中断出现后,OS作为优先级高的任务,切换到该任务执行.而在"时间触发嵌入式"的系统中,任务是按时间序列执行的,如果使用和发生了其它中断,就可能破坏了时间序列.
第2个问题是使用OS中的一个普遍存在的问题,就是任何划分"任务".目前市场上有众多的介绍OS的书和**,但好象都没有介绍或给出任何划分"任务"的基本原则和方法.当然,在实际应用中可能会根据不同的应用有变化,但我也感觉有一个基本可作为分析和考虑的划分原则.
我曾经让我的研究生去探讨这2个题目,但他们都不感兴趣.另外一个(我个人的观点)原因是:研究OS的大都从软件的角度考虑问题.
LZ的问题提出一个课题,如何找到一个能适合8位系统的,界于目前编写系统软件的方式与采用0S之间的一种系统设计方法.能具有OS的基本优点并保留中断响应实时性好的特点. "时间触发嵌入式"是一种可尝试的方法,但好象有缺陷.
我也希望在这方面有经验和研究的提出自己的看法,大家一起讨论. |