ADS1.2的简单使用
来源:互联网 发布:电脑怎么优化系统 编辑:程序博客网 时间:2024/06/05 11:34
ADS 1.2 简单使用(转载) [复制链接]
白手起家
- 帖子
- 29
- 主题
- 25
- 精华
- 0
- 可用积分
- 2
- 专家积分
- 0
- 在线时间
- 17 小时
- 注册时间
- 2010-12-21
- 最后登录
- 2012-03-06
- 串门
- 好友
- 博客
- 消息
- 论坛徽章:
- 0
ADS合适开发和调试如下项目– 无操作系统的C程序.这个相当把ARM作为一个32单片机来使用.– 底层程序.如bootloader– 能直接调试简单的操作系统,如uC-OS-II,ucLinux,Nuclues– 驱动程序和硬件的验证– 比如LCD屏的调试,往往先从ADS程序开始测试,一个新的ARM硬件被调试好往往也先用ADS去测试
在实际应用开发中,市面上最流行的手机方案是MTK,展讯的方案.他们的操作系统是一个嵌入式操作系统Nuclues,CPU的内核采用ARM.
因此,MTK方案的驱动和内核开发环境就是ADS+Nuclues的库为主.同时也用于应用程序开发,但是他们手机界面程序(MMI)也能通VC++加模拟器的方法来调试.
完整的ADS环境由命令行开发工具, ARM 实时库, GUI 开发环境 (Code Warrior 和 AXD) ,实用程序和支持软件组成。 有了这些部件,用户就可以为 ARM 系列的 RISC 处理器编写和调试自己的开发应用程序了。
在ADS程序运行中,可以用几个特殊的变量把RO,RW和ZI段的地址打印出来.
以下均是 unsigned char * 类型,在用打印时需要强制转入成16进制的地址显示(即用%x)
l Image$$RO$$Base 表示RO段起始地址
l Image$$RO$$Limit 表示RO段结束地址
l Image$$RW$$Base表示RW段起始地址
l Image$$RW$$Limit 表示RW段结束地址
l Image$$ZI$$Base表示ZI段起始地址
l Image$$ZI$$Limit 表示ZI段结束地址
Uart_Printf("\r\n<***********************************************>\r\n");
Uart_Printf(" S3C6410 Test Program VER1.0\r\n");
Uart_Printf(" Build time is: %s %s\r\n", __DATE__ , __TIME__ );
Uart_SendString(" Mini6410 Andrew Huang \r\n");
Uart_Printf( " Image$$RO$$Base = 0x%x\r\n", Image$$RO$$Base );
Uart_Printf( " Image$$RO$$Limit = 0x%x\r\n", Image$$RO$$Limit );
Uart_Printf( " Image$$RW$$Base = 0x%x\r\n", Image$$RW$$Base );
Uart_Printf( " Image$$RW$$Limit = 0x%x\r\n", Image$$RW$$Limit );
Uart_Printf( " Image$$ZI$$Base = 0x%x\r\n", Image$$ZI$$Base );
Uart_Printf( " Image$$ZI$$Limit = 0x%x\r\n", Image$$ZI$$Limit );
Uart_Printf("<***********************************************>\r\n");
复杂的分区
简单的AXF的分区,认为程序只有一个RO段,一个RW段。但是在嵌入式程序,很多程序需要更为复杂的分区,可能有好几个RO分不在同地址。在GCC中,非常规的分段需要ld调用lds脚本来设定,在ADS中,需要调用scatter描述文件来设置.
以下就是6410 test的scatter描述文件内容
可以看到除了传统的RO,RW外,它还增加了IRAM和ITCM段.
DRAM 0x50200000{
CODE 0x50200000
{
startup.o (Init,+FIRST)
scatter_load.o (+RO)
* (+RO)
* (+RW, +ZI)
}
IRAM 0x0c000400 0xc00 ;0x0c000000~0x0c0003ff : Exception vector area(Nand Booting)
{
;dmc.o (+RO)
;dmc.o (+RW, +ZI) ; all remaining data
}
ITCM 0x80000000 0x4000
{
; dmc.o (+RO)
dmc_library.o (+RO)
}
DTCM 0x80004000 0x4000
{
; dmc.o (+RW, +ZI)
dmc_library.o (+RW, +ZI)
}
}
三.ADS快速使用手册
------------------------------------------------------------
我们在这里选择ARM Executable Image,在“Project name:”中输入工程文件名,本为“myled”,点击“Location:”文本 Set”按钮,浏览选择想要保存该工程的路径(本例为“D:\work”),将这些设置好之后,点击“ ,即可创建一个新的名为 myled的工程。
注意ADS对中文支持非常不好,强烈建议不在放在中文路径下面
ADS的项目文件是 mcp.创建成功后会出现空项目窗口
– Debug:使用该目标选项,在生成目标的时候,会为每一个源代码生成最完整的调试信息。
– Release:使用该目标选项,在生成目标的时候,不会生成任何调试信息。
一般缺省项目是不能直接来编译的,往往需要对生成的目标进行配置,点击主菜单Edit 菜单,选择“DebugRelSetting…”(注意:这个选项会因为用户选择的不同目标而有所不同), 或者选择项目窗口的配置按钮,出现如图所示的设置窗口。
基中关键几个配置有
1.ARM Assembler 的编译选项 这里要选择汇编编译的指令集。不同CPU要选对类型,如S3C2440要选ARM920T.ADS 1.2不支持S3C6410的ARM1172JZF-S的内核,可以昨时用ARM920T或ARM112020E来代替
还有字节序选择小端字节序.
同理道理,如果你的项目包含C或C++的源码,必须要配置ARM C Compiler选项/ARM C++ Compiler选项.
2.ARM 链接选项
这里LinkType项目,如果Simple类型(即标准只有一个RO,一个RW类型),则需要配置RO_BASE即默认的代码段地址。RW段地址不填表示紧密排在RO段后面。
另外程序的入口地址可以单独配置,不写表示与RO Base地址一致,
如果可以自己初始化启动的程序,一般最好指定是哪一个S中的哪一个段是作为入口。在layout页标签里
如果选择scatter 输出类型,必须要还选择相应的scatter文件路径。
3.输出 bin文件格式
这要做两步设置.首先设置Target Settings中的Post-linker为ARM FromElf
6.清除编译结果(make clean)
选择主菜单的project-->Remove Object Code.或用快捷键 Ctrl->-.
强出对话框,选择All Targets
- 本版精华
- 文库|博客
- S3c6410平台Android移植(有图)(ZF
- android开发 闪屏的实现
- 利用多线程提高程序性能(for Android)
- android 联系人数据库(2.0以后)
- android开发 动态生成控件
- 额,android边学边练--俄罗斯方块。欢迎来拍。
- 写个录音软件玩玩,大家有些什么重口味的需求没?
- 刚才刷了一下i7500的2.1版本,能跑起来了
- Android底下多线程下载远程图片
- 摄像头驱动实现源码分析