(参考文件夹:touch_test,文档:Keil ARM RVMDK软件仿真及SDRAM中调试S3C2410程序.doc)
1、 超级终端显示:Dummy_isr error, interrupt number: 0. INTMSK=0x7fffffff
参考网上的解决方法是(实验未成功):
#include "mmu.h" 把
mmu.c和mmu.h加到工程中,接着在主函数中调用MMU_Init();初始化MMU,好像就解决了。
仿真的时候,你的程序是运行在sdram里面的,也就是0x3000_0000处开始运行
你的中断向量表通过仿真器已经放在了0x3000_0000处。
打开mmu是为了把0x3000_0000地址处的值映射到0x0的地方,因为你的中断向量表是保存在0x0开始的地方,当中断发生时的第一时间,CPU会去0x0地方查中断向量表看是发生了什么中断,是reset还是IRQ还是FIQ还是取数据终止或取指令终止按键外部中断是IRQ中断,然后CPU会去IRQ开始的地方找到你的中断服务函数,这个时候轮到了你的中断服务函数运行的时间了,所以你不打开MMU就不会进入中断服务函数
还有一种方法就是烧写一个简单的小程序到nandflash的block 0,这个小程序要包含中断向量表
当你上电的时候block 0的东西被CPU复制到了叫作stepping stone的地方,他的地址也是0
这个时候你仿真你的程序,不打开mmu也是可以找到中断服务函数了,因为你有中断向量表了
2、 链接错误:.\obj\touch_test.axf: Error: L6218E: Undefined symbol ENTRY (referred from mmu.o).
这个只要将定义__ENTRY的文件包含到MMU.c文件就行
3、 警告信息:warning: A1876W: Use of ‘|’ as a synonym for the :OR: operator is deprecated。
解决方法:将警告敌法的“|”换成“:OR:”。这是因为MDK编译器里的汇编语法与RVDS中的语法有点区别,不过也是兼容的,所以只是给出一个警告。
4、 错误信息:error: A1023E: File “option.inc” could not be opened: No such file or directory
解决方法:将“option.inc”放到2440init.s所在的文件夹里
5、 错误信息:Error: L6218E: Undefined symbol Image$$RW$$Limit 这样的错误,说没定义RW段。
解决方法:因为.sct配置分散文件地址的错误,重新编写.sct加载文件即可
6、 错误信息:Error: L6238E: 2440init.o(Init) contains invalid call form ‘~PRES8(后面的省略)
原因分析:uVision4的每个汇编指令是以8字节对齐的,所以每个汇编文件的首个段要表面是用8字节对齐的。
解决方法,在2440init.s文件的Init段前面添加PRESERVE 8
7、 之前为什么下载不了u-boot到nand flash呢?今天成功了,原因是发现我的u-boot.bin文件有254kB而nand erase 0 30000只擦除192kB的nand flash扇区,所以我将30000该成60000,就成功了(说明文档里要注意细节)
8、 之前只能利用三个USB接口完成串口控制,USB下载的功能。今天在甫华指导下发现,拔掉J-Link时要拔掉的是开发板与J-Link的接线,而不是PC与J-Link的接线,如果拔掉的是PC与J-Link的接线,则ARM板会将J-Link当做负载使用,部分引脚电平则受到影响。
自己将近花了两天时间研究LCD显示问题,用keil制成的BIN文件烧进开发板一直显示不成功,代码研究了很久也没发现什么错,开始以为是自己TD35参数设置不对,最后才发现是自己用的启动文件不对,即2440init.s,一直用的是友善的,好像他们那个是在ADS1.2用的,后来在网上找了另外的2440init.s,终于成功了 +_+,传一下文件防止以后浪费时间在这.切记切记