登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

at91sam7s64调试心得(作者:gliethttp)

作者:gliethttp 栏目:ARM技术
AT91SAM7S64调试心得(作者:gliethttp)
AT91SAM7S64调试心得(作者:gliethttp)

1.光盘上所有AT91SAM7S64的ads1.2或者IAR程序都没有对全局变量初始化和局部变量清零的代码,所以必须自己加上,内存仿真时不会
  有问题,但是烧到FLASH中时,就会出现因为全局变量没有初始化而造成的异常现象:
......
;//环境变量初始化
init_variable
IMPORT  |Image$$RO$$Base|
IMPORT  |Image$$RO$$Limit|
IMPORT  |Image$$RW$$Base|
IMPORT  |Image$$ZI$$Base|
IMPORT  |Image$$ZI$$Limit|


ldr r0, =|Image$$RO$$Limit|
ldr r1, =|Image$$RW$$Base|
ldr r3, =|Image$$ZI$$Base|

;//ZI初始化
cmp r0, r1
beq %F2
1
cmp r1, r3
ldrcc r2, [r0], #4
strcc r2, [r1], #4
bcc %B1
2
ldr r1, =|Image$$ZI$$Limit|
mov r2, #0
3
cmp r3, r1
strcc r2, [r3], #4
bcc %B3

mov pc,lr
......
2.对于象AT91SAM7S64这样的内存只有16k,rom只有64k的小型芯片,
  尽量少用c库文件,如sprintf的加入会使代码陡然增加11k
3.当你的程序4K因为使用sprntf增加了11k数据后共15k,即使你的RO单元只有4K,RW和ZI一共才用了3.16K
  但是因为sprintf中使用了过多堆栈,所以也可能会导致你烧写到FLASH中程序的调试出现异常!
4.#define string0 "abc"
  sizeof(string0) == 4  //程序编译时确定 字符串占用空间大小abc\0,所以4个
  strlen(string0) == 3  //程序编译时确定 字符串的长度

总结:在AT91SAM7S64这种小内存、小FLASH中,只有避免使用c库函数,尤其是sprintf!!!!


2楼: >>参与讨论
moise
re:
使用系统库函数会付出代价的(如stdio.h中的),会使代码加大。如sprintf,调用格式不对有时候还可能会出现一些问题。但是如果使用开发环境的是函数库(如:lib_AT91SAMXXXX.c)无妨,还可以使代码变得清晰易读 。

3楼: >>参与讨论
zhiwei
我在单片机上面搞程序
从来不用库函数。除了io寄存器文件。

4楼: >>参与讨论
mohanwei
51单片机用keil编译,sprintf和printf一起用才1k多,呵呵
 
参与讨论
昵称:
讨论内容:
 
 
相关帖子
麻烦大家帮忙分析上电启动问题
兄弟们!我在这里跪求IC42S32200(SDRAM)初始化程序!谢谢,谢谢了
at91sam7x256的DBGU 串口能做其他用途吗?
求单片机破解高手解密!!!!!n
h-jtag可以支持AT91M55800吗?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号