and001 发表于 2012-6-26 10:50:20

总觉得KEIL编译时超过2K(破解版)后有问题,求高人指点

各位高人:

   我在此论坛之前发了两个贴子!我本人感觉到用KEIL编译的时候,程序不能太长,超一定长度就出现问题,一直在STARTUP.A51里转悠!总跳不到MAIN()中来!不知道大家有否同感?求答案中...


注:   我是用新华龙的C8051F330比较多!

and001 发表于 2012-6-30 15:42:19

谢谢楼上帮忙可是我加了那语句后,问题依旧!
快倒了。。。

and001 发表于 2012-6-26 10:54:55

本帖最后由 and001 于 2012-6-26 11:50 编辑

自己顶下先,自己修改过!好象还是有问题,

改前:

.....
IF IDATALEN <> 0
                MOV   R0,#IDATALEN - 1
                CLR   A
IDATALOOP:      MOV   @R0,A
                DJNZ    R0,IDATALOOP
ENDIF
....

改后: // 不清7F个RAM.
IF IDATALEN <> 0
            ;MOV   R0,#IDATALEN - 1
            ;CLR   A
IDATALOOP:
            ;MOV   @R0,A
            ;DJNZ    R0,IDATALOOP
ENDIF


可还是跳不到MAIN()

请高人指点? 已经注册过了!!

pang7 发表于 2012-6-26 10:57:56

自己修改一下start。a51

BXAK 发表于 2012-6-26 11:48:54

估计你没用注 册 机 注册

and001 发表于 2012-6-26 16:01:43

求高人指点!是否也碰到类似问题!!

壹佰法拉 发表于 2012-6-26 20:27:42

自己下载一个,然后用注册机注册!不要用别人“破解”的;
怀疑:别人破解的是不是注册之后连目录一起拷贝打包的?然后你解压之……这样的话电脑不同可能有很多……麻烦!

and001 发表于 2012-6-27 09:08:53

谢谢楼上的朋友!我按你要求试试看!

lxa0 发表于 2012-6-27 14:37:45

我用的2。0版本好像没有啥问题

and001 发表于 2012-6-27 17:22:24

我是用新华龙的C8051F330仿真! VER2.0应该不支持!
是不是和IC也有关系呀!

usk5yenj4id04dm 发表于 2012-6-27 19:21:57

好像没有这个问题的吧?

liwei_jlu 发表于 2012-6-27 19:43:56

330需要启动后首先禁止看门狗。

DIDADI 发表于 2012-6-27 20:23:19

直接不要新建项目时生成的劳什子STARTUP.A51,没用的。

and001 发表于 2012-6-27 20:54:51

本帖最后由 and001 于 2012-6-27 20:59 编辑

11楼说的好象有些道理!但不知道默认情况下是多久喂一次狗?如果这样我感觉到是一个IC的缺陷

and001 发表于 2012-6-30 13:20:27

真是不好意思!也许我弄错了
事实上我装了EUTAL给地址软件,其实效果是一样的,为什么好象程序没在STARTUP。A51里转悠呢原来是设置问题
刚装完后,我的默认设置是这样的(看附件图片),其实默认设置是真是不好意思!也许我弄错了
事实上我装了你给地址软件,其实效果是一样的,为什么好象程序没在STARTUP。A51里转悠呢原来是设置问题
刚装完后,我的默认设置是这样的 (看附件图片)
但确实给人有程序跑的流畅的感觉!遗憾的是两不是,即不是软件仿真,有不是硬件仿真!并且不能进入软件中断处理代码中
哎!这鬼KEIL让我费尽心思了。。。。

and001 发表于 2012-6-30 13:21:10

烦死了。。

shark 发表于 2012-6-30 13:47:28

和Keil无关, C8051F系统的喂狗时间太短,而且是上电就工作的.如果程序里有大量全局变量(比如数组)要初始化, 这部分工作要在startup.a51里完成, 所以会导致还没执行到main()函数, 系统就复位了.   所以解决办法是在startup.a51里先关狗.


                CSEG    AT      0
?C_STARTUP:   LJMP    STARTUP1

                RSEG    ?C_C51STARTUP

STARTUP1:

                MOV                0D9H,#00h; 加入这行, 关开门狗, closeWDT
IF IDATALEN <> 0
                MOV   R0,#IDATALEN - 1
                CLR   A
IDATALOOP:      MOV   @R0,A
                DJNZ    R0,IDATALOOP
ENDIF

and001 发表于 2012-6-30 15:47:42

请高人帮忙呀!

and001 发表于 2012-7-1 20:54:34

本帖最后由 and001 于 2012-7-1 20:59 编辑

谢谢楼上帮忙可是我加了那语句后,问题依旧!快倒了。。。
我把问题图片再上传一下
好象看不到了。。 程序在软件仿中中出现问题,


特别提示:我的MCU IC是C8051F330D

and001 发表于 2012-7-1 20:55:43

好象看不到了。。继续上传图3

and001 发表于 2012-7-1 20:56:29

好象看不到了。。继续上传图4

and001 发表于 2012-7-1 20:57:06

好象看不到了。。继续上传图5

and001 发表于 2012-7-1 20:58:04

好象看不到了。。继续上传图6, 请高人继续帮忙指点

期待中。。。

and001 发表于 2012-7-2 09:11:34

依然等待高人帮忙....

shark 发表于 2012-7-2 15:25:44

软件仿真也是这样? 程序打包发上来看看.

and001 发表于 2012-7-2 20:51:34

本帖最后由 and001 于 2012-7-2 20:52 编辑

你好!为了让你看得不清楚点我去掉了不需要的部分,但编译HEX文件后长度为2139(我感觉到程序就在STARTUP.A51中转悠!!跑不到MAIN()中来)

program size :size data=83.0 xdata=64 code=2139
没有错误 但有15个无关紧要的警告

我是想写个蓝牙无线通信程序!

请高人帮忙分析,看看问题在哪里!谢谢

Jigsaw 发表于 2012-7-2 20:58:16

么用过这个启动文件呃

and001 发表于 2012-7-2 20:59:05

是的!哈哈
哈哈

shark 发表于 2012-7-2 22:06:44

and001 发表于 2012-7-2 20:51 static/image/common/back.gif
你好!为了让你看得不清楚点我去掉了不需要的部分,但编译HEX文件后长度为2139(我感觉到程序就在STARTUP. ...

编译不能过, 一大堆Warning, Keil的Warning是不能忽略的,

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:HEARTRATE
    MODULE:nRF8001.obj (NRF8001)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:CONFIGER
    MODULE:nRF8001.obj (NRF8001)
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:FLG_CONNECTED
    MODULE:nRF8001.obj (NRF8001)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:CONFIGER
    MODULE:nRF8001.obj (NRF8001)
    ADDRESS: 07B2H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:FLG_CONNECTED
    MODULE:nRF8001.obj (NRF8001)
    ADDRESS: 06C6H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:FLG_CONNECTED
    MODULE:nRF8001.obj (NRF8001)
    ADDRESS: 06D4H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:HEARTRATE
    MODULE:nRF8001.obj (NRF8001)
    ADDRESS: 0847H
这些符号都无法链接, 编译结果必定是错误的.

shark 发表于 2012-7-2 22:29:01

因为你给的文件不全,为了编译通过(再说一遍,Keil C的Warning不能忽略, 这货连链接不上函数都不是ERROR,而是Waring), 修改nF8001.c 加了两个变量后没问题了. 见附件.


and001 发表于 2012-7-3 09:20:36

本帖最后由 and001 于 2012-7-3 09:24 编辑

谢谢高高人!考虑问题非常严谨! 真是厉害呀! 根本问题在二维数组那里!!
顺便问问 以下两个定义有什么区别(难怪我把二维数组缩短好象就没有问题了,总感觉文件长了不行)?
charcode        Configer[]={};
extern   constcharConfiger[]={};

chenerbox2 发表于 2012-7-3 09:43:27

一个是实实在在的饼,一个是墙上的饼

and001 发表于 2012-7-3 12:40:18

在高人的帮忙下,可以结贴了!谢谢高人呀!这里高人多呀! 好人也多!

shark 发表于 2012-7-3 14:00:20

and001 发表于 2012-7-3 09:20 static/image/common/back.gif
谢谢高高人!考虑问题非常严谨! 真是厉害呀! 根本问题在二维数组那里!!
顺便问问 以下两个定义有什么区别( ...

C51语言和标准C都不认为const的东西要存储在flash里, 而是存储在RAM中, 想表达存储在Flash中,C51 要用code 修饰.

and001 发表于 2012-7-3 17:54:14

真不好意思!我改了下我的程序还有8个警告!不知道你还修改了??

除了你定义了 (在NRF8001.C中)
unsigned char HeartRate ; // add for compile
bit flg_connected;      // add for compile

unifax001 发表于 2012-7-17 10:42:05

我的能用 没问题的
页: [1]
查看完整版本: 总觉得KEIL编译时超过2K(破解版)后有问题,求高人指点