首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]调用子程序时,PC不回到调用的位置

[求助]调用子程序时,PC不回到调用的位置

使用SCI DemoSoftware文件夹中的project时,EVB板能正常和串口通讯。

我修改的过程:
1、建工程文件,选择P&E调试(BDM工作正常)
2、把SCI DemoSoftware中的MAIN.C 代替新建的文件夹中的MAIN.C。把SCI有关寄存器用NE64.H中的名称代替。
3、编译、MAKE、DEDUG通过。

问题:
在单步运行到SCITx(*SCIStringp + Stringcase)时,调用SCITx()后,PC不回到调用的位置,PC=0000;不知为什么?

与EVB9S12NE64板上的设置(跳线)有关吗? 与MEMORY的管理有关吗?与PROJECT有关吗?
与CodeWorrior软件有关吗?我没有注册。

unsigned char main(void){
                                    
    if (SCIConfig())         /*Configure SCI port*/
       ;
    else{
        return ERROR_ERROR;
    }

    EnableInterrupts;               
    SCIIniTx = START_CYCLE;  /*Initialize transmission cycle flag*/
        
    for (;;){               
        if(SCIIniTx == START_CYCLE){   
            SCIIniTx = WAIT_CYCLE;  

            SCIStringp=SCIString;/*Set pointer to character string*/
            SCITx(*SCIStringp + Stringcase);/*Send first byte of string*/
        }
   
    }
    return ERROR_OK;
}

void SCITx(unsigned char SCIByte){
               
    SCI0DRL = SCIByte;  /*Write data byte to SCI0DRL register*/
    SCI0CR2 |= 0x80;        /*Enable TDRE interrupt*/
}
你使用中断来传送数据,单步运行是不会动作的,你可以在其他地方设置断点,看数据有没有传送出去。
程序在FLASH中的位置:
Start12.c:C000 - C03F
MAIN.C   :3D8000 - 3D80A0

程序在FLASH中的分配显然是不对的,我是用CodeWorrior 建工程文件,选择P&E调试(BDM工作正常);建立project过程应该是对的。我使用的CodeWorrior是有16K限制的,但我的程序很小,有几个问题请教:
1、16K的限制范围是64K的高端、低端?
2、如何控制程序在64K中的位置?要看那部分资料?

    谢谢!!!!
检查中断向量对否
控制程序位置可参阅编译器手册
51,freescale,c,asm,protel,fpga
我已经解决了,的确是中断向量的问题,原来在.prm文件中没有定义中断向量;我加上以后,串口可以正常工作;谢谢各位。初次使用 CodeWorrior和NE64,确有很多问题,谢谢大家的支持!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
返回列表