打印

请教一个单片机问题

[复制链接]
1686|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
newelec|  楼主 | 2007-4-3 11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    在飞利浦51单片机上跑的程序,我使用一个函数指针,然后用两个字符串作为这个函数指针的参数。传递给单片机的时候却运行不了,同样的函数在pc上能跑,估计是内存或寄存器的问题?一开始直接定义参数为(char *para1,char *para2)时提示 间接调用:寄存器的参数不匹配;后来改成(char idata *para1,char idata *para2)了不报错,但下载代码后单片机得不到运行结果。换idata为xdata也不行。
   对这块不是很熟,望高手指点啊,谢!

相关帖子

沙发
ayb_ice| | 2007-4-3 11:18 | 只看该作者

随便说说

  可以把代码发上来年年...

使用特权

评论回复
板凳
xiaopet| | 2007-4-3 11:24 | 只看该作者

re

或者可以看看C语言转换成ASM后的程序是怎么样的?
直接分析ASM代码是不是有问题?

使用特权

评论回复
地板
newelec|  楼主 | 2007-4-3 11:30 | 只看该作者

代码说明

这是cpp版的,放单片机上的c程序就输入输出改了下。如果把参数由字符串改为整形之类的是没问题的。在怀疑是不是51参数传递的问题。字符串参数好像比较特殊

使用特权

评论回复
5
ayb_ice| | 2007-4-3 11:32 | 只看该作者

随便说说

  KEIL里一般不推荐使用函数指针,因为KEIL不是标准C编译器,但是简单的函数指针还是可以用的,不妨把你的代码帖上来,大家帮你参谋参谋...

使用特权

评论回复
6
ayb_ice| | 2007-4-3 11:38 | 只看该作者

随便说说

  粗略看了一下,LZ的程序在51上可能是不太合适...
  建议看KEIL用户手册,然后改进代码...

使用特权

评论回复
7
newelec|  楼主 | 2007-4-3 11:42 | 只看该作者

re_随便说说

  代码在上面,是改到vc++6.0能运行。我觉得用的函数指针比较简单啊。
  一开始直接用char *para1作参数时报错说寄存器参数不匹配。后来改用小模式就不报错了,但运行结果得不到。如果还是用函数参数该怎么改一下呢?或者用其他什么方式实现类似函数指针的功能?我想通过串口接收字符串,根据字符串内容然后实现不同函数功能。

使用特权

评论回复
8
bluerainhe| | 2007-4-3 11:50 | 只看该作者

KEIL编译器跟VC++不同

VC++功能多强大啊,KEIL是专为单片机开发的

使用特权

评论回复
9
newelec|  楼主 | 2007-4-3 11:54 | 只看该作者

re_上

  我只是为验证程序算法没错才放到vc上跑的。到keil上肯定要改相应的输入输出和存储。

使用特权

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

本版积分规则

1

主题

4

帖子

0

粉丝