1. Warning : L6305W: Image does not have an entry point.(Not specified or not set due to multiple choices)
使用分散加载文件的时候,会提示这样的警告。在ARM Linker的Equivalent Command Line的框里加入: -entry 0x0
2. Error : C3028E: <argument 1 to 'sprintf'>: implicit cast of pointer to non-equal pointer
调用ADS内部函数sprintf时,参数类型错误。因为sprintf里面的参数是char类型的指针,所以可以在参数前加上(char*)强制转换。
3.ARM7+UCOS+ZLG/GUI的时候,如果画窗口的函数放在第一个任务的时候就没法画窗口。
把任务堆栈改大小为64就可以了.
4.自己写的输出字符串函数里面的字符串参数不可以用 " " 括起来,会提示implicit cast of pointer to non-equal pointer。
原因是因为我写的输出字符串函数的参数是unsigned char 类型,而用 " "括起来的字符是char类型的,所以类型不对。修改一下就可以了。
问题5:用RealView mdk3.70编译完,两个软件联机调试,显示正常,但是直接将生成的hex文件,加载到lpc2106里就没有显示了?(MDK3.20正常)
解决: 在STARTUP.S里:
;未定义指令
Undefined
B Undefined ;死在这里了,我将Undefined换成ResetInit后,执行正常
---------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------
参考: zhaoyu2005兄弟的 http://bbs.21ic.com/icview-140505-1-1.html?912789
1楼: zhaoyu2005
原来ADS的工程生成的hex文件,直接加载到proteus里的lpc2106,能正常驱动1602显示,用RealView mdk编译完,两个软件联机调试,显示正常,但是直接将生成的hex文件,加载到lpc2106里就没有显示了,哪位大侠指点下
2楼: zhaoyu2005
今天又看了下,好像直接加载hex文件的话,程序就没有运行到main函数,端口没有初始化成低电平。不知咋回事
3楼:zhaoyu2005
刚才试了下,进入软中断了,不管用mdk的还是周立功的startup.s,将程序加载到proteus里直接运行,都进入软中断死循环,请高手解释下咋处理
4楼: zhaoyu2005
不好意思,看错了,不是进入软中断了,是进入 Undefined 也就是 在死到在0x00000040了
代码如下:
AREA RESET,CODE,READONLY
ENTRY
;interrupt vectors
;中断向量表
Reset
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0xb9205f80
LDR PC, [PC, #-0xff0]
LDR PC, FIQ_Addr
ResetAddr DCD ResetInit
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD 0
FIQ_Addr DCD FIQ_Handler
;未定义指令
Undefined
B Undefined ;死在这里了,我将Undefined换成ResetInit后,执行正常
;软中断
SoftwareInterrupt
B SoftwareInterrupt
;取指令中止
PrefetchAbort
B PrefetchAbort
;取数据中止
DataAbort
B DataAbort
;快速中断
FIQ_Handler
STMFD SP!, {R0-R3,R12, LR}
BL FIQ_Exception
LDMFD SP!, {R0-R3, LR}
SUBS PC, LR, #4
问题6:移植了UC/GUI到ARM7上,在PROTEUS上仿真,使用UC/GUI自带的例子,不能动态显示。
解决方法:如果用UC/GUI自带的延时函数就会显示不了,用自己写的延时函数可行。原因未明.
问题7:ADS1.2分散加载文件警告 Warning : L6329W: ./src/mem_b.scf(LINE 54, col 13) Pattern *(RW) ONLY matches removed unused sections.
解决方法:原因是因为定义了大部分未使用过的段,ADS为了优化代码,给删除了,可以不用理会。去除警告的办法:去除LINKER里Remove unused sections里面的三个勾,但这样程序可能会变得比优化时的大很多。建议不用理会.
问题8:Warning : C2892E: singned constant overflow: '<<'
解决方法: 这个警告是因为在程序中进行移位操作时,ADS默认移位数据为signed形,加上强制转换就可以了。例如PINSEL0 = PINSEL0 & ~( 0x3 << 30)改成PINSEL0 = PINSEL0 & ~( (uint32) 0x3 << 30)。
问题8:WIN 7 下使用ADS1.2自动关闭
解决方法:意外退出主要和兼容性设置中的“禁用桌面元素”有关系,在兼容性设置中选择“禁用桌面元素”,并以系统管理员身份运行,应该没有什么问题了。