打印
[AVR单片机]

请教一种编程思想,请高手赐教

[复制链接]
1581|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dudongdao|  楼主 | 2009-8-5 22:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
移植汇编程序到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可以这么操作堆栈吗,大家有没有什么更好的办法?

相关帖子

沙发
auzxj| | 2009-8-5 22:58 | 只看该作者
把所有功能函数写在中断里,都在中断里执行,每进一次中断修改一次栈顶

使用特权

评论回复
板凳
dudongdao|  楼主 | 2009-8-6 00:15 | 只看该作者
怎么改~~  怎么确定这个栈顶~~  C立面怎么改~~  
请赐教~~

使用特权

评论回复
地板
_init_| | 2009-8-7 17:12 | 只看该作者
用C吧

使用特权

评论回复
5
dudongdao|  楼主 | 2009-8-9 15:36 | 只看该作者
嗯,是的,想用C

使用特权

评论回复
6
madboy21| | 2009-8-9 18:37 | 只看该作者
我想楼主在概念上可能想错了。因为不清楚到底要做什么?或是只以为响应时间的问题。

使用特权

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

本版积分规则

90

主题

413

帖子

1

粉丝