打印

keilc51的rtxtiny2的几个问题

[复制链接]
2729|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fzu_csc|  楼主 | 2010-11-19 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1、关于在T0里嵌入中断代码:HW_TIMER_CODE
MACRO
; Empty Macro by default

RETI

ENDM



问题:如何在A51文件中嵌入C51代码?


2、关于存储管理:
(1)
栈空间需求[size=9.0000pt]

[size=9.0000pt]3字节[size=9.0000pt]/任务[size=9.0000pt]

(2)RTX51 Tiny为每个任务在8051的内部RAM区(IDATA)维护一个栈。任务
运行时,将得到可能得到的最大数量的栈空间。任务切换时,先前的任务栈被

压缩并重置,当前任务的栈被扩展和重置。

(3)循环切换需要13个字节的栈空间存储任务环境和所有的寄存器。



问题:栈任务PC指针只需要2字节,栈空间需求3字节,另外一字节存储什么?

禁止循环切换不需要保护寄存器,那么意思是只保护(1)所说的3字节,os_switch_task只能在任务的主程序里面调用,不能在其子函数里调用,未使用到所有的寄存器?

相关帖子

沙发
ayb_ice| | 2010-11-19 10:30 | 只看该作者
1: 那个宏里一般是添加简单的汇编代码
2: 每个任务必须1个堆栈指针,1个延时变量,1个状态变量,共3个字节,这3个字节是静态分配的,其它的取决于配置和程序实际运行情况,但其实最少2个字节的断点堆栈(禁止轮转),所以禁止轮转可以大大减少对堆栈的要求,也可以使用非重入函数,好处多多
3:os_switch_task没有什么特别使用限制,不存在你的说法
....

使用特权

评论回复
板凳
fzu_csc|  楼主 | 2010-11-19 10:46 | 只看该作者
谢谢ayb_ice,一般只是添加简单的汇编代码,但如果要添加C51代码,可行否?

另外,因为时间片转,看门狗反而是不是就没办法加了...加了也意义不大,真正程序死循环你也监测不出来。

使用特权

评论回复
地板
ayb_ice| | 2010-11-19 11:14 | 只看该作者
1: 可以加C代码,不过没有必要,必竟那是在中断中,而且是在系统中断中
2: 可以加WDT,不过RTOS下WDT意义要大打折扣的,因为RTOS编程一般基于事件驱动型,典型的某个任务运行取决于是否有触发事件,如果没有触发任务一直处等待状态,根本不会运行...

使用特权

评论回复
5
fzu_csc|  楼主 | 2010-11-19 12:27 | 只看该作者
我觉得,在T1经常用来做波特率发生器,没有T2的情况下,因为tiny不支持抢占式优先级调度,那么某些优先级高的时间触发任务即可T0中断内执行;一些极短时间触发任务用os_wait受到任务运行时间的影响,减小INT_CLOCK又更增大CPU负担,此时置于T0内判断也不错。

使用特权

评论回复
6
ayb_ice| | 2010-11-19 13:18 | 只看该作者
此优先非彼优先

使用特权

评论回复
7
fzu_csc|  楼主 | 2010-11-19 13:32 | 只看该作者
6# ayb_ice
不管怎样,总之这个优先还是有一定意义的。

所以...请教,如何嵌入呢?

使用特权

评论回复
8
ayb_ice| | 2010-11-19 13:44 | 只看该作者
有兴趣的话,去分析tiny的源代码,会受益非浅的

使用特权

评论回复
9
zhaohualiang| | 2010-11-19 15:06 | 只看该作者
安顺场

使用特权

评论回复
10
zdhlixiang2006| | 2010-11-19 20:21 | 只看该作者
51单片机玩OS没意思

使用特权

评论回复
11
fzu_csc|  楼主 | 2010-11-20 11:45 | 只看该作者
2# ayb_ice
禁止轮转的话,那因为没有抢占优先级调度,那个裸奔应该没多大差别了吧...

另外有一个 os_running_task_id,这个服务一点意义都没有吧...


内核都是汇编写的..看不来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

142

帖子

0

粉丝