|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
at91sam7s64调试心得(作者:gliethttp) |
作者:gliethttp 栏目:ARM技术 |
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 于 2007/4/30 11:08:00 发布:
re: 使用系统库函数会付出代价的(如stdio.h中的),会使代码加大。如sprintf,调用格式不对有时候还可能会出现一些问题。但是如果使用开发环境的是函数库(如:lib_AT91SAMXXXX.c)无妨,还可以使代码变得清晰易读 。 |
3楼: | >>参与讨论 |
作者: zhiwei 于 2007/4/30 18:36:00 发布:
我在单片机上面搞程序 从来不用库函数。除了io寄存器文件。 |
4楼: | >>参与讨论 |
作者: mohanwei 于 2007/4/30 19:56:00 发布:
51单片机用keil编译,sprintf和printf一起用才1k多,呵呵 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |