A.每分钟到达点之后9秒时序图 |___________________|___________________|___________________|___________________| | 700ms | 300ms|200ms|300ms|500ms | 700ms | 300ms|200ms|300ms|500ms | <<时间 |--> F071 <|-->F05 <| _ |-->F05<|--> F072 <|-->F05 <| _ |-->F05<| <<任务 | + | | + + | | + |0 1 | | 2 4 | | 5 <<秒值 | | |<-300ms延时| | |<-300ms延时| | | | | | #-- |<-秒跳 |<-秒跳 |<-秒跳 |<-秒跳 |<---每分钟到达点
|___________________|___________________|___________________|___________________| | 700ms | 300ms|200ms|300ms|500ms | 700ms | 300ms|200ms|300ms|500ms | <<时间 |--> F073 <|-->F05 <| _ |-->F05<|--> F074 <|-->F05 <| _ |-->F05<| <<任务 + + | | + + | + 5 6 | | 7 8 | | 9 <<秒值 | | |<-300ms延时| | |<-300ms延时| | | | | | |<-秒跳 |<-秒跳 |<-秒跳 |<-秒跳 |<-秒跳
B.每分钟其余时间时序图 |___________________|___________________|___________________| | 500ms | 500ms | 500ms | 500ms | 500ms | 500ms | <<时间 |-->F05 <| _ _ _ _ |-->F05 <| _ _ _ _ |-->F05 <| _ _ _ _| <<任务 + | + | + | + 8 | 9 | 10 | 11 <<秒值 | |<-500ms延时 |<-500ms延时 |<-500ms延时 | | | | |<-秒跳 |<-秒跳 |<-秒跳 |<-秒跳
补充说明: 1 F05执行情况有两种如下: 1.a F05在每秒的开始点起被执行,如图B描述的时序图. 1.b F05并没有严格在每秒的时刻到达的时候被执行,但每一秒内均被执行过一次,如图A描述的时序图(这点不知是否合适?) 2.在每分钟的时刻到达后,9秒内F05如1.a所讲,9秒期间4个顺序任务F071--F074依次在每两秒的开始点被执行 3.图B中秒的维护比较容易,秒跳变比较精准;图A中,秒跳有偏差,一次是1200ms 下次是800ms 如此往复4次.虽然秒跳位置偏差但时间并未出现偏差
要求点检查: 1.时间精确<<可以做到 2.F071---F074顺序执行<<可以做到 3.每秒一次F05<<做到了?(但时间点并不是次次都在秒跳的开始点) 4.任务不允许被打断<<做到 -------------------- 个人认为以下要求不能满足: 1.如果要求秒跳均是在每秒的开始点,做不到,因为700ms的任务加上一个500ms的任务比1秒长. 2.要求耗时500ms的任务F05必须开始于每秒的开始点,也做不到.
1、用单CPU做一个精确的时钟。 2、以此时钟为基准,每秒钟运行一次一个500ms开销的任务,设其为F05()。 3,每分钟到达时,运行一次4个紧密关联的函数,每个运行开销700ms, 设其为F071(),F072(),F073(),F074();要求4个函数必须顺序运行。 4、为简化题目,只做秒、分2位。 |