stm8s 发表于 2014-1-21 13:35:15

求救LPC1788 emwin 移植 为什么 运行到 GUI_Init(); 卡死

本帖最后由 stm8s 于 2014-1-22 13:02 编辑

网上找了一个现成的貌似英蓓特LPC1788emwin 无OS 代码   仿真时 为什么 运行到 GUI_Init(); 就卡死

先谢   

194莫元 已是全部家当

nongxiaoming 发表于 2014-1-24 18:14:23

估计是你的SDRAM配置不对,导致GUI内存管理出问题了,你看看你的SDRAM配置,你板上的SDRAM是32bit的吗?

shandian 发表于 2014-1-24 18:25:44

nongxiaoming 发表于 2014-1-24 18:14
估计是你的SDRAM配置不对,导致GUI内存管理出问题了,你看看你的SDRAM配置,你板上的SDRAM是32bit的吗? ...

搭车问个问题,LPC1788使用两片16bit的SDRAM K4S561632组成64MB 32bit后,程序从使用一片32MB 32bit SDRAM K4M563233的代码修改的话,是不是只要把SDRAM_SIZE改为0x04000000就行了?其他参数都不用修改吧?

stm8s 发表于 2014-1-24 18:33:14

本帖最后由 stm8s 于 2014-1-26 15:50 编辑

nongxiaoming 发表于 2014-1-24 18:14
估计是你的SDRAM配置不对,导致GUI内存管理出问题了,你看看你的SDRAM配置,你板上的SDRAM是32bit的吗? ...

UCGUI 牛人 nongxiaoming终于出现了,SDRAM是 K4S561632    这是我的开发板电路图。{:3_48:}

nongxiaoming 发表于 2014-1-24 21:08:19

shandian 发表于 2014-1-24 18:25
搭车问个问题,LPC1788使用两片16bit的SDRAM K4S561632组成64MB 32bit后,程序从使用一片32MB 32bit SDRA ...

不是的呢,还有几个参数配置不同,具体看数据手册上有讲,官方历程里面也有的,你可以看看,我之前提供的工程中也有写,上面直接配置一个宏定义就可以打开是16bit还是32bit了。区别你自己去看看就好。

shandian 发表于 2014-1-24 21:11:30

本帖最后由 shandian 于 2014-1-24 21:18 编辑

nongxiaoming 发表于 2014-1-24 21:08
不是的呢,还有几个参数配置不同,具体看数据手册上有讲,官方历程里面也有的,你可以看看,我之前提供的 ...

总线位宽是一样的,都是32bit。只是由一片32bit位宽32MB的SDRAM,变为由两片16bit位宽SDRAM组成的32bit 64MB,只要修改长度就够了吧?总线宽度没变的。

我只修改了SDRAM_SIZE后,运行SDRAM测试是通过了。但是在memory窗口查看内存,发现超出SDRAM地址范围一点的区域,0xA4000000之后的内容也变成了内存测试时使用到的数据。开始我以为是调试器内存缓冲问题引起的。但是在J-link设置里面关闭了内存和代码缓冲功能,还是和之前一样。所以我怀疑是不是哪里不对。

nongxiaoming 发表于 2014-1-21 13:35:16

stm8s 发表于 2014-1-24 18:33
UCGUI 牛人 nongxiaoming终于出现了,SDRAM是 K4S561632    这是我的开发板电路图。...

ucgui牛人谈不上,这些都是之前在学校有时间玩玩而已,现在工作都没有用这个,都是用的RTGUI,希望有一天RTGUI也能像emwin这么优秀。你这个SDRAM是三星的,你那个工程里面用的是海力士的,里面的配置不懂你有没有改,SDRAM的参数有些可能不一致,具体要看你使用的SDRAM的数据手册。有些也是相兼容的。还有看你的工程里面,应该是从emwin官方给的工程改的,链接脚本里面有RW_RAM1 0xA0000000 UNINIT 0x02000000{; RW data
   * (VRAM, GUI_RAM, GUIDEMO_STACK, FS_RAM, IP_RAM, USB_RAM)
}
3上定义的这堆东西已经不再使用了,你可以看看我之前提供的工程,我之前提供的一个16bit SDRAM的工程应该可以在你这个板子上跑起的,我那时候用的sdram也是K4S561632。

nongxiaoming 发表于 2014-1-24 21:29:38

shandian 发表于 2014-1-24 21:11
总线位宽是一样的,都是32bit。只是由一片32bit位宽32MB的SDRAM,变为由两片16bit位宽SDRAM组成的32bit 6 ...

这个是可以的,我以为你是16bit的换成两片组成32bit,搞错了。对于你查看0xA4000000以外的地址数据来说是没有意义的。也就是说0xA4000001地址的数据其实等于0xA0000001的数据。为什么会这样呢?因为实际上MCU发出0xA4000001地址的时候,地址线已经超出你sdram的数据,你的SDRAM收到的是低位的地址,最高位丢失。也就是你的SDRAM收到的是0x01,那个0x4000001最高位已经丢掉,但你的MCU还说认为是这个地址的数据,读取数据的时候读出的数据其实是0x01处的数据。

shandian 发表于 2014-1-24 21:36:51

nongxiaoming 发表于 2014-1-24 21:29
这个是可以的,我以为你是16bit的换成两片组成32bit,搞错了。对于你查看0xA4000000以外的地址数据来说是 ...

恩,好。感谢~
页: [1]
查看完整版本: 求救LPC1788 emwin 移植 为什么 运行到 GUI_Init(); 卡死