打印

请教用过汇编转C的高手

[复制链接]
1971|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dudongdao|  楼主 | 2009-8-5 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
移植汇编程序到C,思路上有些堵塞了。我先说一下我的疑问。
     汇编程序时中断响应232代码,接收到正确的232命令后,把对应的处理函数压栈到SP,然后执行RETI指令到处理函数处,处理完堆栈设置为一个固定值,例子如下:
PC_RS232:   

Push      PSW
Push      A
中间是命令判断RS232_FUN_EXIT:

MOV      DPTR,         #FUN5;比如要执行函数功能5
RS232_FUN_EXIT:
           POP      A
           POP      PSW
           POP      SP_TEMP
           POP      SP_TEMP
           PUSH     DPL
           PUSH     DPH
           RETI
到这里执行了RETI就跳转到FUN5执行了。
执行完之后  ,给SP一个固定的值。         
MOV      SP,        #0BFH                 ;设置堆栈位置为0BFH
JMP      WAIT_INT

整体意思是通过232判断要执行哪个功能,然后直接到哪个功能区执行,不考虑以前
在哪一步执行,不考虑以前的SP是多少,反正执行完之后给SP一个固定的值。

这么做的好处是能快速响应串口命令,比如串口发送一个命令后,单片机执行,执行时间可能是几百毫秒或者几秒,这期间如果再有其他命令则放弃本次任务,执行新任务。
进入中断马上执行新任务可能造成SP错误,所有执行完一次任务就给SP一个固定值,

现在用C改写,应该怎么做才能做到这个实时性的要求呢,C可以这么操作堆栈吗,大家有没有什么更好的办法?

相关帖子

沙发
shawn_rin| | 2009-8-7 17:58 | 只看该作者
小弟求教一下:
(1) 实时性的问题是意思?您232处理完了,直接用函数指针跳转到您自己定义的程序入口地址 可以吗?
(2) 你所谓的操作堆栈不就是想把程序控制字这些自己赋值?支持内嵌汇编的是可以

使用特权

评论回复
板凳
dudongdao|  楼主 | 2009-8-8 10:08 | 只看该作者
1.是这样的,实时性就是单片机正在忙工作A,但现在工作B发生了,那你就去工作B忙,放弃工作A。这样是可行的,但中间是有些问题要考虑,如果你不懂汇编是有点想不通,你用汇编写过就知道怎么处理这些问题了。
2.是内嵌了几句,内嵌的时候也遇到一些问题,想找一个最佳方法。你真正做的时候才会遇到一些问题的。

使用特权

评论回复
地板
e掾木| | 2009-8-12 08:10 | 只看该作者
实时性简单地说就是 任何被处理的功能模块不能长时间占用CPU,任何模块都可以在申请CPU使用权之后尽快得到满足。要命的工作优先级高,可以延后处理的优先级低。一般来说RTOS设计要求CPU闲置时间尽可能多,占用CPU 70%以上的设计就不是很优化的方案。

使用特权

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

本版积分规则

90

主题

413

帖子

1

粉丝