关于KEIL C不用调用随机函数rand(),求解决办法

daibolang 2011-08-19 10:35:51
#include <stdlib.h>
#include <stdio.h> /* for printf */

void tst_rand (void) {
int i;
int r;
UINT8 *str = "2536";
for (i = 0; i < 10; i++) {
r = rand(); // 调试不能跳到下一步。
printf ("I = %d, RAND = %d\n", i, r);

}
}

从汇编代码切实出现问题,跳到初始位置。
20: r = rand();
C:0x3972 120000 LCALL C:0000
C:0x3975 90027B MOV DPTR,#0x027B
C:0x3978 EE MOV A,R6
C:0x3979 F0 MOVX @DPTR,A
C:0x397A A3 INC DPTR
C:0x397B EF MOV A,R7
C:0x397C F0 MOVX @DPTR,A

编译窗口的信息
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: RAND
MODULE: .\Main.obj (MAIN)
ADDRESS: 3973H

请问各位应该如何解决,谢谢
...全文
1149 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Great_Bug 2011-08-20
  • 打赏
  • 举报
回复
要排除文件损坏和丢失问题...
Great_Bug 2011-08-20
  • 打赏
  • 举报
回复
库有问题....
daibolang 2011-08-20
  • 打赏
  • 举报
回复
谢谢各位,问题已经解决了!
不是头文件也不是库问题,主要是我有包含了一个rand.c、rand.h的文件,里面只是调用rand的函数而已。没有其它定义。将这文件名修改为其它就可以啦!
schlafenhamster 2011-08-19
  • 打赏
  • 举报
回复
还是没连接
REFERENCE MADE TO UNRESOLVED EXTERNAL
重建工程试试,
daibolang 2011-08-19
  • 打赏
  • 举报
回复
没有错误,有警告:
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: RAND
MODULE: .\Main.obj (MAIN)
ADDRESS: 3973H
schlafenhamster 2011-08-19
  • 打赏
  • 举报
回复
编译没错误,没报警?
daibolang 2011-08-19
  • 打赏
  • 举报
回复
芯片是C8051F500芯片。51CPU.
schlafenhamster 2011-08-19
  • 打赏
  • 举报
回复
是不是51CPU?
daibolang 2011-08-19
  • 打赏
  • 举报
回复
是调用了函数
schlafenhamster 2011-08-19
  • 打赏
  • 举报
回复
调用:tst_rand (void)
daibolang 2011-08-19
  • 打赏
  • 举报
回复
没有优化它。我试过还是不行
daibolang 2011-08-19
  • 打赏
  • 举报
回复
我调用了这个函数rand().编译器就是不生成
schlafenhamster 2011-08-19
  • 打赏
  • 举报
回复
调用一下看看,是不是优化掉了
daibolang 2011-08-19
  • 打赏
  • 举报
回复
是的,没调用,不知为什么,我看了工程设置是没有问题的
schlafenhamster 2011-08-19
  • 打赏
  • 举报
回复
没调用?
daibolang 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 schlafenhamster 的回复:]

该函数声明在: #include <stdlib.h>
查看.M51文件有:
E:\KEIL\C51\LIB\C51S.LIB (RAND)
[/Quote]
在我那个工程里的M51没有这个。。
但我的KEIL目录可以找到这个库文件。

假如我单独一个简单的工程文件,只产生一个随机数是没有问题的
在M51文件可以看到
C:\KEIL\C51\LIB\C51L.LIB (RAND)
schlafenhamster 2011-08-19
  • 打赏
  • 举报
回复
该函数声明在: #include <stdlib.h>
查看.M51文件有:
E:\KEIL\C51\LIB\C51S.LIB (RAND)
daibolang 2011-08-19
  • 打赏
  • 举报
回复
那应该怎么解决呢?
schlafenhamster 2011-08-19
  • 打赏
  • 举报
回复
RAND 函数没有连接
lbing7 2011-08-19
  • 打赏
  • 举报
回复
我印象中随机数函数是在数学库里面的

你明显没有包含那个头文件

其它关于51中用随机数的方法,完全可以让定时器跑起来,然后,用到随机数的时候,直接去取定时器寄存器的值即可

27,511

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧