打印

MC9S12D32AD转换疑问

[复制链接]
1821|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
busdriver|  楼主 | 2007-1-25 21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1。程序有一个1ms的定时中断,设计思想:中断和主程序中都用AD转换,但在调试中发现,一旦在主程序中用AD转换,程序不能正常运行,总停在AD转换子程序处,而不能执行其它的程序如通讯程序??而把AD转换都放在定时中断中,程序乃正常运行!十分困惑。请问原因?

相关帖子

沙发
张明峰| | 2007-1-26 18:31 | 只看该作者

你不会追踪调试吗?

基本上, 中断和主程序中都用AD转换的设计思想就是错误的。
就是铁了心要这么做,BDM是干吗的?赶紧追踪调试啊。程序死哪儿啦?那里是些什么代码?干吗在那里死循环啦?
busdriver should drive for something, not wait for something. Am I right to say that?

使用特权

评论回复
板凳
busdriver|  楼主 | 2007-1-27 11:33 | 只看该作者

多谢张工!!

我现在把AD转换都放在定时中断里面。为节约中断时间,把转换结果的相关运算都放在主程序中。不明白的是“基本上, 中断和主程序中都用AD转换的设计思想就是错误的。”,could you tell me why?
我当然做过调试拉:AD转换用的查询等待,程序就死在哪里,查询不到转换完成标志。
另外:在子程序中定义了局部变量,程序逻辑就乱了,把变量都做成全局变量,程序正常,,是不是由于堆栈不够了?但是把栈空间增加也不能解决问题。谢谢!!(栈空间由原来的256bytes增加到512bytes,total RAM is 1k bytes,RAM足够)

使用特权

评论回复
地板
gsnet| | 2007-1-27 11:49 | 只看该作者

在主程序和定时中断中对A/D的读取,属于对共享资源的存取

对共享资源的存取若很好的安排(参考操作系统的相关知识),是可以井水不犯河水的,但管理共享资源的代码可能会占用单片机不少计算能力。

架构越简单的程序,越不容易出问题。所以还是统一在定时中断中只做A/D采集,在主程序中对采集回来的数(已经放进自定义的变量或缓冲区中)做复杂的处理(如排序,平均等)。

仅供参考。

使用特权

评论回复
5
张明峰| | 2007-1-27 12:13 | 只看该作者

why

“中断和主程序中都用AD转换的设计思想就是错误的”是指在主程序中和中断里都进行AD转换,如果处理不好,很容易产生资源冲突。就一个AD模块,两家同时用肯定是不可能的。当然你现在是在中断里进行AD转换,而主程序里对AD数据进行处理,这当然是正确的,也应该这么做。

AD转换结束标志应该查询“COCO”位。局部变量肯定不是你程序逻辑混乱的原因,不然C就可以扔了。

使用特权

评论回复
6
busdriver|  楼主 | 2007-1-27 13:18 | 只看该作者

非常感谢

谢谢张工和gsnet详细及时的解答,,看来我!还缺乏对mcu的深刻理解,需要不断学习,谢谢你们的无私而宝贵解答。谢谢

使用特权

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

本版积分规则

44

主题

416

帖子

0

粉丝