logo资料库

Keil uVision4 MDK 用户手册(中文).pdf

第1页 / 共1472页
第2页 / 共1472页
第3页 / 共1472页
第4页 / 共1472页
第5页 / 共1472页
第6页 / 共1472页
第7页 / 共1472页
第8页 / 共1472页
资料共1472页,剩余部分请下载后查看
ARM 开发工具集
ARM 开发工具集
基于μVision的RealView编译工具概述
介绍
嵌入式程序
启动代码
Retarget库文件
链接器配置
指定存储域
中断服务程序
软件中断管理
定位变量到指定的位置
禁止0初始化
从CARM移植
快速启用ARM开发工具集用户指南
介绍
软件开发周期
目录结构
请求协助
开发工具
μVision IDE概述
操作
实用工具
选择工具集
带USB-JTAG 接口的ULINK仿真器
创建应用程序
创建一个工程
运行uVision
选择工具集
创建工程文件
选择设备
创建新的源文件
添加及配置启动代码
组工程文件
设置目标硬件的工具选项
增加连接控制文件(针对GNU和ADS)
编译工程以及创建十六进制文件
工程目标和文件组
在工程工作区浏览文件和组的属性
工程选项页概述
使用μVision调试器测试程序
CPU仿真
启动调试模式
执行应用程序
设置调试选项
调试窗口和对话框
外设变量
外设寄存器
CPU引脚寄存器(VTREG)
I/O端口
串口
技巧和窍门
预设外设和CPU的配置
仿真I/O端口
仿真中断和时钟中断
仿真外部I/O设备
给PC COM端口分配串行I/O
检测非法内存访问
从文件中输入命令
预置I/O端口和内存的值
向文件中写入调试输出信息
快捷键的使用
例程
HELLO: 第一个ARM例程
HELLO 工程文件
编辑HELLO.C
编译、链接HELLO例程
测试程序
MEASURE: 一个远程测量系统
硬件要求
MEASURE工程文件
编译链接MEASURE
测试MEASURE例程
查看程序代码
查看内存内容
调用栈
跟踪记录
断点对话框
查看变量
查看修改片上外设
使用外设对话框
使用虚拟寄存器符号
使用用户和信号函数
使用性能分析器
使用片上外设
启动代码
CPU头文件
并行I/O端口
中断
Keil工具集的中断函数
GNU工具集的中断函数
ARM ADS工具集的中断函数
中断向量控制器
ARM 中断向量控制器 (VIC)
Atmel 高级中断控制器(AIC)
定时器/计数器
串行接口
看门狗定时器
脉冲宽度调制
A/D转换器
低功耗模式
CPU 设置
CPU启动代码
缺省的中断服务程序 (针对Keil)
内存重映射 (针对Atmel设备)
重定向库函数
链接控制文件 (针对GNU)
JTAG 调试
JTAG 连接器引脚
ULINK 连接
JTAG 接口设备
ULINK:调试 — 设置
ULINK: 复位时序
Flash 编程
为Flash下载配置ULINK2
预定义Flash编程算法
定义Flash算法
RDI 接口驱动
RDI 配置
JLINK 软件构成
选择RDI接口驱动及RDI DLL
使用 μVision Flash 编程器
使用RDI Flash 编程器
RDI 调试
µVision3 IDE用户指南
μVision3 简介
关于开发环境
软件开发流程
目录结构
请求协助
菜单命令、工具栏、快捷键
File菜单和File命令
Edit菜单和Edit命令
Outlining 菜单
高级(Advanced)菜单
选择文本命令
View 菜单
Project菜单和Project命令
Debug菜单和Debug命令
Flash菜单
Peripherals菜单
Tool菜单
SVCS菜单
Window 菜单
Help菜单
状态栏
创建应用程序
创建工程
选择ARM工具集
创建工程文件和选择CPU
工程工作空间
创建新的源文件
在工程里加入源文件
创建文件组
设置目标工具选项
配置启动代码
编译工程
创建HEX文件
工程目标和文件组
在工程工作空间里查看文件和文件组属性
选项对话框
技巧与窍门
编译后启动外部工具
为列表和目标文件指定单独的文件夹
使用μVision 3 设备数据库中没有的CPU
创建一个库文件
文件和文件组属性
文件扩展名
从μVision 1 中引入工程文件
版本和序列号信息
始终包含指定的库模块
使用定制的编译器
编译器和汇编器中的不同设置
μVision3工具
配置向导
文本搜索
源浏览器
运行外部程序
使用SVCS 菜单
键码序列
运行PC-Lint
使用BKR EasyCODE
DTC接口
使用μVision3调试器测试程序
调试器使用
CPU 仿真
启动调试模式
应用程序的执行
调试窗口及对话框
断点对话框(Breakpoint)
代码统计(Code Coverage)对话框
CPU 寄存器
反汇编窗口
逻辑分析仪
逻辑分析仪的配置
逻辑分析仪的详细设置
限制
内存窗口
输出窗口命令
调试命令Debug Commands
变量及寄存器
调试函数
执行剖析器
性能分析仪
串行窗口
符号窗口
工具箱(Toolbox)
Watch窗口
表达式
常量
系统变量
外围设备变量
I/O 口
串行端口
程序变量(符号)
行号
位地址
类型说明
操作符
μVision3和C中表达式的差异
表达式例
技巧及窍门
CPU配置及片上外设查看
I/O口仿真
中断及时钟输入仿真
外部I/O设备仿真
用PC的COM 口仿真目标串口
检查非法内存访问
从文件中输入命令
预置I/O口或存储器的内容
写调试输出到文件
使用快捷键
调试命令
ASM
ASSIGN
BreakDisable
BreakEnable
BreakKill
BreakList
BreakSet
COVERAGE
DEFINE
DIR
Display
Enter
EVALuate
EXIT
Go
INCLUDE
KILL
LOAD
LOG
Logic Analyzer
MAP
MODE
Ostep
Performance Analyzer
Pstep
RESET
SAVE
SCOPE
SET
SIGNAL
SLOG
Tstep
Unassemble
WatchSet
WatchKill
调试函数
建立函数
调用函数
预定义函数
exec函数
getdbl函数
getint函数
getlong函数
memset函数
printf函数
rand函数
rwatch函数
swatch函数
twatch函数
wwatch函数
_TaskRunning_函数
_RBYTE函数
_RWORD函数
_RDWORD函数
_RFLOAT函数
_RDOUBLE函数
_sleep_函数
_WBYTE函数
_WWORD函数
_WDWORD函数
_WFLOAT函数
_WDOUBLE函数
__acos
__asin
__atan
__cos
__exp函数
__log函数
__log10函数
__sin函数
__sqrt函数
__tan函数
用户函数
信号函数
调试函数与C之间的差异
μVision3 和 dScope的差异
仿真脚本模板
数字信号输入
按钮
中断信号
脉冲模式
模拟信号输入仿真
方波信号
锯齿波信号
正弦波信号
噪音信号
混合信号
UART通信
CAN通信
CAN的外设对话框
虚拟仿真寄存器(VTREG)
CAN - 仿真输入消息
CAN - 处理输出消息
CAN - 发送周期性的消息
I2C仿真
I2C的概念
I2C仿真
I2C总线对话框
I2C虚拟仿真寄存器(VTREG)
仿真与I2C总线连接的设备
I2C总线的应用例程
SPI仿真
虚拟仿真寄存器(VTREG)
SPI仿真例程
Flash编程
配置Flash菜单
ULINK2配置
准备Flash编程
总线配置
加载附加程序
Flash编程算法
十六进制文件的Flash下载
μVision对话框页面
File
Device Database
License Management - Single-User License(文件 - 许可管理 - 单用户许可)
Edit
Find in Files
Configuration
Editor
Colors & Fonts
User Keywords
Shortcut Keys
Templates
View
Symbol Window
Project
Components, Environment, Books... -Project Components
Project Components
Folders/Extensions
Books
Select Device
Options
Device
Properties
Target
Target (针对 Keil ARM 工具
Target 51
Target C166
Target 251
Target ARM GNU
ARM ADS
Output
Keil
ARM GNU
ARM ADS
Listing
Keil
ARM GNU
ARM ADS
EC++ Compiler
Compiler
C (Keil CARM Compiler)
C51 / CX51 Compiler
C166
C251
ARM GNU
ARM ADS
Assembler
Keil AARM
A51
A166
A251
ARM GNU
ARM ADS
Linker
LA Locate
LA Misc
BL51Locate
L51 Misc
L251 / LX51 Locate
L251 / LX51 Misc
L166 Locate
L166 Misc
ARM GNU Linker
ARM ADS/RealView Linker
Debug
Utilities
Debug
Breakpoints
Debug Settings
Logic Analyzer
Memory Map
Performance Analyzer
Function Editor
Tools
Setup PC-Lint
Customize Tools Menu
SVCS- 版本控制系统配置
例程
HELLO: 第一个ARM例程
MEASURE: 一个远程测量系统
打开MEASURE工程文件
编译链接MEASURE
测试MEASURE
查看程序代码
查看内存内容
程序执行
调用栈
跟踪记录
断点对话框
查看变量
命令行调用
批处理示例
附录
产品认证
文件类型
设备数据库的参数
RealView 编译器用户指南
序言
关于本书
适合的读者
使用本书
印刷约定
更深入的读物
反馈
对 RealView 编译工具的反馈信息
对本书的反馈
简介
关于ARM编译器
源语言模式
C 和 C++ 库
C99的新特征
语言特征
库特征
使用 ARM 编译器
使用命令行选项
调用ARM编译器
命令行选项的顺序
用环境变量设定命令行选项
自动完成命令行选项
从文件读取编译器选项
指定键盘输入
命名约定
可移植性
输出文件
包含的文件
当前位置
环境变量RVCT31INC
搜索路径
环境变量 TMP 和 TMPDIR
预编译头文件
自动PCH处理
手动 PCH 处理
控制 PCH 处理期间的信息输出
性能问题
指定标准调用过程 (AAPCS)
交互操作限定符
位置独立限定符
使用链接器反馈
线程本地存储
八字节对齐特征
编译器特点
Intrinsics
关于 intrinsics
intrinsics 指令
ETSI 基本操作
TI C55x intrinsics
寄存器命名变量
Pragmas
编写代码经验
代码优化
对大小和速度进行优化
优化级别和调试视图
选择目标设备
循环优化
使用volatile
程序复杂度度量(Code metrics)
测量代码和数据的大小
测量栈的使用情况
减少目标文件和库中的调试信息
函数
减小函数参数传递的开销
__value_in_regs
__pure
ARM 函数限定的位置
内联
编译器如何决定内联
什么时候适合编译器内联函数?
管理内联
透过文件之间内联函数
调试数据和--[no]_inline 关键字
使函数成为静态
对 ROM 镜象中的内联函数设置断点
数据对齐
数据对齐
修饰语 __packed 和对数据的非对齐访问
__packed 结构体对比单个 __packed 成员
使用浮点运算
支持浮点操作
VFP 体系结构
--fpu 选项
浮点链接
--fpmode 选项
使用 --fpu 选项
VFP 支持
识别和陷入零除数错误
整数除法
(软件)浮点除法
支持 ARM v6 体系结构
指令生成
对齐支持
大小端支持
诊断信息
重新诊断
诊断信息的严重性
控制诊断信息的输出
更改诊断信息的严重性
禁止诊断信息
诊断信息中的前缀字母
使用 -W 选项禁止警告信息
退出状态代码和终止信息
信号反应
退出状态
数据流警告
使用内联和嵌入汇编程序
内联汇编程序
内联汇编程序语法
内联汇编操作的限制
虚拟寄存器
常数
指令扩展
条件标志
操作数
函数调用和跳转
标号
与前期版本 ARM C/C++ 编译器的差异
嵌入式汇编器
内嵌汇编语法
嵌入式汇编语句的限制
嵌入式汇编程序表达式和 C 或 C++ 表达式之间的差
嵌入式汇编函数的生成
__cpp 关键字
手动重复解决方案
相关基类的关键字
成员函数类的关键字
调用非静态成员函数
与前期版本 ARM C/C++ 编译器的差异
遗留内联汇编访问sp,lr或pc
在遗留代码中访问 (r13), lr (r14), 和 pc (r15)
内联汇编代码与嵌入式汇编代码之间的差异
半主机
关于半主机
什么是半主机?
半主机接口
半主机实现
RealView ARMulator ISS
RealView ICE
指令设置系统模式
实时监控
Semihosting(半主机) 操作
angel_SWIreason_EnterSVC (0x17)
angel_SWIreason_ReportException(0x18)
SYS_CLOSE (0x02)
SYS_CLOCK (0x10)
SYS_ELAPSED (0x30)
SYS_ERRNO (0x13)
SYS_FLEN (0x0C)
SYS_GET_CMDLINE (0x15)
SYS_HEAPINFO (0x16)
SYS_ISERROR (0x08)
SYS_ISTTY (0x09)
SYS_OPEN (0x01)
SYS_READ (0x06)
SYS_READC (0x07)
SYS_REMOVE (0x0E)
SYS_RENAME (0x0F)
SYS_SEEK (0x0A)
SYS_SYSTEM (0x12)
SYS_TICKFREQ (0x31)
SYS_TIME (0x11)
SYS_TMPNAM (0x0D)
SYS_WRITE (0x05)
SYS_WRITEC (0x03)
SYS_WRITE0 (0x04)
调试主体交互 SVCs
RealView编译器参考指南
序言
简介
编译器的命令行选项
命令行选项
-Aopt
--[no_]alternative_tokens
--[no_]anachronisms
--apcs=qualifer...qualifier
--arm
--asm
--[no_]autoinline
--bigend
--[no_]brief_diagnostics
--bss_threshold=num
-c
-C
--c90
--c99
--[no_]code_gen
--[no_]compile_all_input
--cpp
--create_pch=filename
-Dname[(parm-list)][=def]
--[no_]data_reorder
--[no_]debug
--[no_]debug_macros
--default_extension=ext
--[no_]dep_name
--depend=filename
--depend_format=string
--[no_]depend_system_headers
--device=list
--device=name
--device_opt=option
--diag_error=tag[,tag,...]
--diag_remark=tag[,tag,... ]
--diag_style={arm|ide|gnu}
--diag_suppress=tag[,tag,...]
--diag_suppress=optimizations
--diag_warning=tag[,tag,...]
--diag_warning=optimizations
--[no_]dollar
--dwarf2
--dwarf3
-E
--enum_is_int
--errors=filename
--[no_]exceptions
--[no_]exceptions_unwind
--[no_]export_all_vtbl
--[no_]export_defs_implicitly
--[no_]extended_initializers
--feedback=filename
--[no_]force_new_nothrow
--forceinline
--fpmode=model
--fpu=list
--fpu=name
--[no_]friend_injection
--gnu
--[no_]guiding_decls
--help
--[no_]hide_all
-Idir[,dir,...]
--[no_]implicit_include
--[no_]implicit_include_searches
--[no_]implicit_typename
--info=totals
--[no_]inline
--interleave
-Jdir[,dir,...]
--kandr_include
-Lopt
--library_interface=lib
--library_type=lib
--list
--littleend
--locale=lang_country
--loose_implicit_cast
--[no_]lower_ropi
--[no_]lower_rwpi
-M
--md
--message_locale=lang_country[.codepage]
--min_array_alignment=opt
--[no_]multibyte_chars
--[no_]multifile
--[no_]nonstd_qualifier_deduction
-o filename
-Onum
--[no_]old_specializations
--omf_browse
-Ospace
-Otime
--[no_]parse_templates
--pch
--pch_dir=dir
--[no_]pch_messages
--[no_]pch_verbose
--pending_instantiations=n
--pointer_alignment=num
--[no_]project=filename
--preinclude=filename
--[no_]reduce_paths
--reinitialize_workdir
--remarks
--[no_]restrict
--[no_]rtti
-S
--[un]signed_bitfields
--[un]signed_chars
--show_cmdline
--split_ldm
--split_sections
--[no_]strict
--strict_warnings
--sys_include
--thumb
-Uname
--[no_]unaligned_access
--use_pch=filename
--[no_]using_std
--[no_]vfe
--via=filename
--[no_]vla
--vsn
-W
--wchar16
--wchar32
--workdir=directory
--[no_]wrap_diagnostics
语言扩展
预处理程序扩展
#assert
#include_next
#unassert
#warning
在C90中可用的C99语言特性
// 注释
下标结构
灵活数组成员
C++和C90中可用的C99语言特性
Variadic宏
超长整型
restrict
十六进制浮点
标准C语言扩展
常量表达式
数组和指针扩展
块范围函数声明
Dollar signs in identifiers
顶级声明
良性重声明
外部实体
函数原型
标准C++语言扩展
? 运算符
类成员的声明
friend
读/写常量
标量类型常量
类型转换
标准C和标准C++语言扩展
寄存器变量的地址
函数的参数
匿名类,结构和联合
汇编器标签
空声明
十六进制浮点常量
不完全枚举
整数类型扩展
标签定义
长浮点
非静态局部变量
结构,联合,枚举和位域扩展
GNU 语言扩展
备选关键字
asm 关键字
Case范围
联合的转换
字符转义序列
复合文字
指定初始化
条件
初始化
内联
扩展的左值
指针算法
声明表达式
未命名字段
编译器的特性
关键字和操作符
__align
__alignof__
__ALIGNOF__
__asm
__forceinline
__global_reg
__inline
__int64
__INTADDR__
__irq
__packed
__pure
__smc
__softfp
__svc
__svc_indirect
__svc_indirect_r7
__value_in_regs
__weak
__writeonly
__declspec 属性
__declspec(dllexport)
__declspec(dllimport)
__declspec(noinline)
__declspec(noreturn)
__declspec(nothrow)
__declspec(notshared)
__declspec(thread)
函数属性
__attribute__((alias))
__attribute__((always_inline))
__attribute__((const))
__attribute__((deprecated))
__attribute__((malloc))
__attribute__((noinline))
__attribute__((noreturn))
__attribute__((pure))
__attribute__((section))
__attribute__((unused))
__attribute__((used))
__attribute__((weak))
类型属性
__attribute__((aligned))
__attribute((packed))
__attribute__((transparent_union))
__attribute__((alias))
__attribute__((at(address)))
__attribute__((aligned))
__attribute__((deprecated))
__attribute__((packed))
__attribute__((section))
__attribute__((transparent_union))
__attribute__((unused))
__attribute__((used))
__attribute__((weak))
__attribute__((zero_init))
Pragmas
#pragma [no_]anon_unions
#pragma arm
#pragma arm section [section_sort_list]
#pragma diag_default tag[,tag,...]
#pragma diag_error tag[,tag,...]
#pragma diag_remark tag[,tag,...]
#pragma diag_suppress tag[,tag,...
#pragma diag_warning tag[, tag, ...]
#pragma [no_]exceptions_unwind
#pragma hdrstop
#pragma import symbol_nam
#pragma [no_]inline
#pragma no_pch
#pragma Onum
#pragma once
#pragma Ospace
#pragma Otime
#pragma pop
#pragma push
#pragma [no_]softfp_linkage
#pragma unroll [(n)]
#pragma unroll_completely
#pragma thumb
指令 intrinsics
__breakpoint
__builtin_clz
__builtin_constant_p
__builtin_expect
__builtin_frame_address
__builtin_return_address
__builtin_popcount
__cdp
__clrex
__clz
__current_pc
__current_sp
__disable_fiq
__disable_irq
__enable_fiq
__enable_irq
__fabs
__fabsf
__force_stores
__ldrex
__ldrt
__memory_changed
__nop
__pld
__pli
__qadd
__qdbl
__qsub
__rbit
__rev
__return_address
__ror
__schedule_barrier
__semihost
__sev
__sqrt
__sqrtf
__ssat
__strex
__strt
__swp
__usat
__wfe
__wfi
__yield
ARMv6 SIMD intrinsics
ETSI 基本操作
C55x intrinsics
编译器预定义
预定义的宏
函数名称
C和C++实现的详细信息
C和C++实现的详细信息
字符集和标识符
基本数据类型
基本数据类型的操作
结构、联合、枚举和位域
C++实现的详细信息
使用::operator new函数
试验数组
C++ 函数中的旧式 C 参数
过时的特性
模板实例化
名称空间
C++ 异常处理
外部内联函数
Via文件语法
via文件概述
Via 文件求解
语法
标准C实现定义
实现定义
翻译
环境
标识符
字符
整数
浮点
数组和指针
寄存器
结构、联合、枚举和位域
限定符
表达式求值
预处理命令
库函数
ISO C 标准未定义的行为
标准 C++实现定义
整型转换
调用纯虚拟函数
语言支持的主要特性
标准C++库实现的定义
C 和 C++ 编译器的实现限制
C++ ISO/IEC 标准限制
整型数的范围限定
浮点数限制
RealView 库和浮点支持指南3.1 版
序言
简介
C 和 C++ 库
关于C 和 C++ 库
C 和 C++ 库特性
名称空间
编写可重入和线程安全的代码
可重入和线程安全简介
在 C 库中使用静态数据
__user_libspace 静态数据区
多线程应用程序中的管理锁
在多线程应用程序中使用 ARM C 库
ARM C 库中的线程安全
ARM C++ 库中的线程安全
编译包含 C 库的应用程序
在应用程序中使用库
编译用于半主机环境的应用程序
编译用于非半主机环境的应用程序
编译不包含 C 库的应用程序
整数和浮点 (FP) 辅助函数
裸机整数 C
具有浮点功能的裸机 C
使用 C 库
独立 C 库函数
将 C 库裁剪为适应新运行环境
C 和 C++ 程序如何使用库函数
__rt_entry
退出程序
__rt_exit()
__rt_lib_init()
__rt_lib_shutdown()
裁剪静态数据访问
用汇编器宏裁剪 locale 和 CTYPE
在链接时选择语言环境 (locale)
在运行时选择语言环境
定义一个语言环境块
LC_CTYPE 数据块
LC_COLLATE 数据块
LC_MONETARY 数据块
LC_NUMERIC 数据块
LC_TIME 数据块
_get_lconv()
localeconv()
setlocale()
_findlocale()
lconv 结构
用C宏裁剪 locale 和 CTYPE
在链接时选择语言环境 (locale)
在运行时选择语言环境
宏和实用函数
_get_lc_ctype()
_get_lc_collate()
_get_lc_monetary()
_get_lc_numeric()
_get_lc_time()
_get_lconv()
localeconv()
setlocale()
_findlocale()
__LC_CTYPE_DEF
__LC_COLLATE_DEF
__LC_TIME_DEF
__LC_NUMERIC_DEF
__LC_MONETARY_DEF
__LC_INDEX_END
The lconv structure
裁剪错误信号、错误处理和程序退出函数
_sys_exit()
errno
__rt_errno_addr()
__raise()
__rt_raise()
__default_signal_handler()
_ttywrch()
__rt_fp_status_addr()
裁剪存储管理
避免使用ARM提供的堆和使用堆的函数
支持 malloc
裁剪运行时存储器模型
存储器模型
控制运行时存储器模式
编写自己的存储器模型
__user_initial_stackheap()
__user_setup_stackheap()
__user_heap_extend()
__user_heap_extent()
__user_stack_cleanup_space()
__rt_heap_extend()
__rt_stack_postlongjmp()
裁剪输入/ 输出函数
对低级函数的依赖性
依赖于目标的输入/ 输出支持函数
_sys_close()
_sys_read()
_sys_write()
_sys_ensure()
_sys_flen()
_sys_seek()
_sys_istty()
_sys_tmpnam()
_sys_command_string()
#pragma import(_main_redirection)
裁剪其它 C 库函数
clock()
_clock_init()
time()
remove()
rename()
system()
getenv()
_getenv_init()
选择实时除法
ISO 定义的实现
ISO C 库实现定义
标准 C++ 库实现定义
C 库扩展
atoll()
strtoll()
strtoull()
printf()
snprintf()
vsnprintf()
lldiv()
llabs()
wcstombs()
alloca()
strlcpy()
strlcat()
_fisatty()
__heapstats()
__heapvalid()
库命名约定
放置 ARM 库
辅助库
识别库变体
C 微库
关于微库
与默认 C 库的差异
用微库建立应用程序
使用微库
创建栈
创建堆
进入和退出程序
裁减微库输入/输出函数
微库中缺少的 ISO C 特性
浮点支持
软件浮点库,fplib
浮点库(fplib)特性
特殊格式的数的算法
浮点数、双精度数和整数之间的转换
long long 和其它数格式之间的转换
浮点比较
C99 函数
控制浮点环境
__ieee_status()
__fp_status()
__vfp_status()
Microsoft 兼容性函数
C99 兼容的函数
ARM 对C99 接口的扩展
数学库, mathlib
数学库中的范围缩减
确定浮点数的类型(fpclassify)
确定一个数是否有限 (isfinite)
确定一个数是否无穷 (isinf)
确定一个数是否为 NaN (isnan)
确定一个数是否规范(isnormal)
返回一个数的符号位 (signbit)
复制符号函数 (copysign, copysignf)
比较宏 (isgreater, isgreaterequal, isless, islessequal,islessgreater, isunordered)
反双曲函数 (acosh, asinh, atanh)
立方根 (cbrt)
误差函数 (erf, erfc)
exp(x) 减1 (expm1)
Gamma 函数 (gamma, gamma_r)
Hypotenuse 函数 (hypot)
第一类 (j0, j1, jn) Bessel 函数
gamma 对数函数
x 加1的对数 (log1p)
IEEE 754 求余数函数 (remainder)
IEEE 取整运算 (rint)
返回一个数的尾数部分 (significand)
第二类 (y0, y1, yn)Bessel 函数
遗留, 一个数的指数 (ilogb, ilogbf, ilogbl)
遗留, 确定一个数是否有限 (finite)
遗留,确定一个数是否为 NaN (isnan)
IEEE 754 算法
基本数据类型
算法和舍入
异常
RealView 汇编器用户指南
序言
简介
关于RealView 编译工具汇编器
ARM 汇编语言
使用ARM 汇编语言
简介
ARM 体系结构概述
体系结构的版本
ARM, Thumb, Thumb-2和 Thumb-2EE指令集
ARM, Thumb和 ThumbEE 状态
处理器模式
寄存器
指令集概述
指令功能
汇编语言模块的结构
汇编语言源文件的编排
ARM 汇编语言模块的示例
调用子程序
条件执行
ALU 状态标志
条件执行 条件码后缀
使用条件执行
使用条件执行的示例
Q标志位
将常数装载到寄存器中
使用MOV和MVN指令直接加载立即数
用MOV32装载常数到寄存器
使用 LDR Rd, =const 装载常数
将地址装载到寄存器中
用 ADR 和 ADRL 直接装载
用 LDR Rd, = label 装载地址
装载和存储多个寄存器指令
ARM 和 Thumb中装载和存储多个寄存器的指令
用 LDM 和 STM 实现栈操作
用LDM和STM 实现块复制
宏的使用
检测与分支的宏示例
无符号整数除法的宏示例
使用帧命令
汇编语言的变迁
汇编器参考
命令语法
获取可用选项的列表
通过环境变量设定命令行选项
AAPCS
浮点数模式
内存访问属性
预先执行一个 SET 命令
分解长LDMs 和 STMs指令
将列表发送到一个文件中
工程模板选项
控制诊断信息的输出
控制异常表的产生
源语句行的格式
预定义的寄存器和协处理器名称
预先声明的寄存器名称
预先声明的扩展寄存器名称
预先声明的协处理器名称
内置变量和常数
符号
符号命名规则
变量
数字常数
汇编时变量的替换
标号
局部标号
表达式、文本和运算符
字符串表达式
字符串文本
数字表达式
数字文本
浮点文字
与寄存器相关和与程序相关的表达式
逻辑表达式
逻辑文本
运算符优先级
一元运算符
二元运算符
诊断信息
内部互锁
IT 模块的产生
Thumb跳转目标地址的对齐
使用C预处理器
ARM 和Thumb 指令
指令集概述
Thumb中的指令宽度选择
指定指令宽度选项 .W 和 .N
某些指令不同宽度的情况
诊断信息中的警告
存储器访问指令
地址对齐
LDR 和STR (立即数偏移)
LDR and STR (寄存器偏移)
LDR and STR (用户模式)
LDR (与pc相关)
ADR
PLD 和 PLI
LDM 和 STM
PUSH 和 POP
RFE
SRS
LDREX 和 STREX
CLREX
SWP和SWPB
通用数据处理指令
灵活的第二操作数
ADD, SUB, RSB, ADC, SBC和RSC
SUBS pc, LR
AND, ORR, EOR, BIC和ORN
CLZ
CMP 和 CMN
MOV和MVN
MOVT
TST 和 TEQ
SEL
REV, REV16, REVSH和RBIT
ASR, LSL, LSR, ROR 和 RRX
IT
SDIV和UDIV
乘法指令
MUL, MLA和MLS
UMULL, UMLAL, SMULL和 SMLAL
SMULxy 和SMLAxy
SMULWy 和SMLAWy
SMLALxy
SMUAD{X} 和 SMUSD{X}
SMMUL, SMMLA和 SMMLS
SMLAD和SMLSD
SMLALD 和SMLSLD
UMAAL
饱和指令
饱和算术
QADD, QSUB, QDADD和 QDSUB
SSAT和USAT
并行指令
并行加法和减法
USAD8 和USADA8
SSAT16和USAT16
组合和分离指令
BFC 和 BFI
SBFX 和 UBFX
SXT, SXTA, UXT和UXTA
PKHBT和PKHTB
跳转指令
B, BL, BX, BLX 和 BXJ
CBZ 和 CBNZ
TBB和TBH
协处理器指令
CDP 和 CDP2
MCR, MCR2, MCRR和MCRR2
MRC, MRC2, MRRC 和MRRC2
LDC, LDC2, STC和STC2
杂项指令
BKPT
SVC
MRS
MSR
CPS
SMC
SETEND
NOP, SEV, WFE, WFI和YIELD
DBG, DMB, DSB和 ISB
ThumbEE 指令
ENTERX 和LEAVEX
CHKA
HB, HBL, HBLP和 HBP
伪指令
ADRL伪指令
MOV32 伪指令
LDR 伪指令
UND 伪指令
命令参考
按字母顺序排列的命令表
符号定义命令
GBLA, GBLL和GBLS
LCLA, LCLL和LCLS
SETA, SETL和SETS
RELOC
RN
RLIST
CN
CP
数据定义命令
LTORG
MAP
FIELD
SPACE
DCB
DCD和DCDU
DCDO
DCFD和DCFDU
DCFS 和DCFSU
DCI
DCQ 和 DCQU
DCW和DCWU
COMMON
DATA
汇编控制命令
嵌套命令
MACRO和MEND
MEXIT
IF, ELSE, ENDIF和ELIF
WHILE和WEND
框架命令
FRAME ADDRESS
FRAME POP
FRAME PUSH
FRAME REGISTER
FRAME RESTORE
FRAME RETURN ADDRESS
FRAME SAVE
FRAME STATE REMEMBER
FRAME STATE RESTORE
FRAME UNWIND ON
FRAME UNWIND OFF
FUNCTION 或 PROC
ENDFUNC 或ENDP
报告命令
ASSERT
INFO
OPT
TTL 和SUBT
指令集和语法选择命令
ARM, THUMB, THUMBX, CODE16 和CODE32
杂项命令
ALIGN
AREA
END
ENTRY
EQU
EXPORT 或 GLOBAL
EXPORTAS
GET或INCLUDE
IMPORT 和 EXTERN
INCBIN
KEEP
NOFP
REQUIRE
REQUIRE8 和PRESERVE8
ROUT
ARM 指令集用户指南
简介
ARM / Thumb 指令集
工作模式
异常/中断 向量
CPU 寄存器
程序状态寄存器 (PSR)
数据类型
条件码
移位方式
ARM 指令集
A
ADC
ADD
AND
B
B
BIC
BKPT
BL
BLX
BX
C
CDP
CDP2
CLZ
CMN
CMP
E
EOR
L
LDC
LDC2
LDM
LDR
LDRB
LDRH
LDRSB
LDRSH
LDRD
M
MCR
MCR2
MCRR
MLA
MOV
MRC
MRC2
MRRC
MRS
MSR
MUL
MVN
N
NOP
O
ORR
P
PLD
Q
QADD
QDADD
QSUB
QDSUB
R
RSB
RSC
S
SBC
SMULBB, SMULBT, SMULTB, SMULTT
SMULWB, SMULWT
SMLABB, SMLABT, SMLATB, SMLATT
SMLAWB, SMLAWT
SMLALBB, SMLALBT, SMLALTB, SMLALTT
STC
STC2
STM
STR
STRB
STRH
STRD
SUB
SWI
SWP
SWPB
T
TEQ
TST
灵活的第二操作数Op2
LDM 和 STM 指令的寻址方式
THUMB指令集
A
ADC (Thumb)
ADD (Thumb)
AND (Thumb)
ASR (Thumb)
B
B (Thumb)
BIC (Thumb)
BL (Thumb)
BLX (Thumb)
BX (Thumb)
C
CMN (Thumb)
CMP (Thumb)
E
EOR (Thumb)
L
LDMIA (Thumb)
LDR (Thumb)
LDRB (Thumb)
LDRH (Thumb)
LDRSB (Thumb)
LDRSH (Thumb)
LSL (Thumb)
LSR (Thumb)
M
MOV (Thumb)
MUL (Thumb)
MVN (Thumb)
N
NEG (Thumb)
O
ORR (Thumb)
P
POP (Thumb)
Push (Thumb)
R
ROR (Thumb)
S
SBC (Thumb)
STMIA (Thumb)
STR (Thumb)
STRB (Thumb)
STRH (Thumb)
SWI (Thumb)
SUB (Thumb)
T
TST (Thumb)
RealView 链接器及工具用户指南
序言
简介
Linker 命令语法
关于armlink
armlink 的输入
armlink 的输出
命令行选项顺序
用环境变量指定命令行选项
armlink 命令语法
获取帮助和信息
工程模版选项
指定输入文件列表
控制链接器行为
指定输出文件类型和输出文件名
为映像指定内存映射信息
控制调试信息
控制映像内容
控制胶合代码生成
指定字节地址模式
生成与映像相关信息
控制链接诊断程序
使用中间文件
组合
使用基本链接器功能
指定映像结构
对象和映像的构建块
映像的载入视图和执行视图
指定映像存储器映射
映像入口点
节布局
按属性对输入节排序
使用FIRST 和LAST 放置节
对齐节
调整包括Thumb指令的可执行区
优化和修正
删除公共调试节
删除公共组或节
删除未使用节
删除未使用函数
链接器反馈
RW 数据压缩
PI 代码到绝对代码
胶合代码生成
重新使用胶合代码覆盖执行区
跳转内联
使用命令行选项创建简单映像
类型1:一个载入区和相邻的输出区
类型2:一个载入区和不相邻的输出区
类型3:两个载入区和不相邻的输出区
使用命令行选项来处理C++异常
得到映像的信息
使用与映像相关的信息
访问映像符号
ARM/Thumb 同义词
访问链接器定义的符号
区相关符号
节相关符号
导入链接器定义的符号
访问其他映像符号
创建symdefs 文件
读取symdefs 文件
Symdefs 文件格式
隐藏和重命名全局符号
操纵文件格式
操纵文件命令
使用$Super$$ 和$Sub$$ 覆盖符号定义
使用分散加载描述文件
关于分散载入
为分散载入定义的符号
使用分散加载描述文件指定栈和堆
何时使用分散载入
分散载入命令行选项
简单存储器映射的映像
复杂存储器映射的映像
分散加载描述文件的形式语法
BNF 表示法和语法
分散加载描述文件语法概述
载入区描述
执行区描述
输入节描述
解析多个匹配
解析路径名
分散载入文件的表达式求值
指定区和节地址的示例
在分散载入描述中选择胶合代码输入节
创建根执行区
将区放置在固定地址
使用覆盖来放置段
为根区分配节
保留空白区
安放ARM库
创建页边界区
使用预处理指令
等效的简单映像分散加载描述
类型1 单一加载区和相邻的执行区
类型2 单一加载区和非连续执行区
类型3, 两个加载区和非连续执行区
使用ARM库
关于库
库搜索、选择和扫描
搜索ARM 库
搜索用户库
扫描库
ARM 库管理器
库管理器命令行选项
命令行选项排序
armar 用法示例
使用fromELF
关于fromELF
命令行选项次序
fromELF 命令行选项
fromELF 命令行选项
--base n
code_output_format
--continue_on_error
--decode_build_attributes
--debugonly
--diag_style arm|ide|gnu
--diag_suppress taglist
--dump_build_attributes
--expandarrays
--extract_build_attributes
--fieldoffsets
--help
input_file
memory_config
--no_debug
--no_linkview
--output output_file
--privacy
工程模版选项
--select select_options
--show_cmdline
--text
--vsn
fromELF 使用示例
生成纯二进制文件
以汇编语言EQUS 列出字段偏移
列出静态数据地址
RL-ARM 实时库用户指南
RL-RTX
概述
功能描述
基本函数
进程通信
技术规范
时序规格
怎样使用RTX内核
第一个RTX运用程序
工作原理
时间片中断
系统时钟任务
任务管理
空闲任务
系统资源
多任务协作
轮转多任务
多任务的抢占
栈的管理
用户定时器
中断函数
设置RTX内核
RTX基础配置
任务
堆栈大小
堆栈检查
硬件时钟
多任务轮转
空闲任务
用户定时器
RTX 高级配置
硬件资源需求
配置宏
资源文件
在新工程中使用RTX内核
编写程序
头文件
进程的定义
多个实例
外部引用
信箱的使用
SWI函数
调试
活动任务
系统消息
交通灯例程
打开交通灯例程
函数概述
事件标志管理程序
信箱管理程序
内存分配程序
互斥量管理程序
信号量管理程序
系统函数
任务管理程序
定时器管理程序
用户定时器管理程序
注意事项
函数的使用
IRQ中断的使用
FIQ中断的使用
系统的启动代码
RL-FlashFS
Flash内存管理
内存的组织
文件分配信息
文件数据块
配置Flash文件系统
配置
Flash设备
扇区内存映像
FS_FlashDev.h
转换FlashDev.c
FS_FlashDev.h
转换FlashDev.c
编程及擦除代码
FS_FlashPrg.c
转换 FlashPrg.c
RAM设备
存储卡设备
MCI接口
SPI 接口
文件时间支持
文件配置
库文件
使用Flash文件系统
使用Flash设备
使用专用的Flash设备
使用大容量的Flash设备
使用内部Flash设备
使用 RAM 设备
RAM 配置实例
使用存储卡设备
热插入
调试
函数概述
文件 I/O 程序
文件维护程序
文件时间支持程序
底层程序
SPI接口程序
系统函数
RL-TCPnet
TCP Socket
打开TCP连接
TCP 主动打开
TCP被动打开
发送TCP数据
发送数据示例
UDP Socket
打开UDP连接
发送UDP数据
当DHCP允许
当ARP缓存为空
发送数据示例
配置 TCPnet
静态配置
系统
以太网接口
ARP
PPP 接口
SLIP 接口
UDP Socket
TCP Socket
HTTP服务器
Telnet 服务器
TFTP 服务器
DNS客户端
SMTP 客户端
错误处理函数
运行时间设置
库文件
使用RL-TCPnet
独立
带RTX核
应用
HTTP Web 服务器
脚本语言
CGI 函数
Web 页
使用RAM文件系统
定制出错页
FCARM文件转换器
Telnet 服务器
命令行接口
发送回复信息
Short Reply
长回复
屏幕连续输出
TFTP 服务器
文件系统接口
SMTP 客户端
DNS 解析器
启动DNS
设备驱动
以太网驱动
中断模式
Modem 驱动
串口驱动
使用串行连接
直接电缆连接
Modem 连接
Windows 拨号
添加直接串口连接设备
加入一个新的拨号连接
配置PPP拨号
配置SLIP拨号
调试
允许调试
调试水平
重新定向输出
函数概述
CGI 程序
以太网程序
HTTP 程序
其他TCPnet程序
Modem 程序
PPP 接口程序
串口程序
SLIP 接口程序
SMTP 程序
系统函数
TCP 接口程序
Telnet 程序
TFTP 程序
UDP 接口程序
RL-CAN
资源文件
总述
特性
函数总览
CAN初始化程序
消息接收程序
CAN 消息发送程序
错误
硬件配置
Philips LPC2000 设备
硬件配置
CAN硬件控制器
CAN消息缓存区大小 (FIFO 缓冲器)
使用配置向导
快速启用
仿真器
ST Microelectronics STR710设备
硬件配置
CAN消息缓存区大小 (FIFO 缓冲器)
使用配置向导
快速启用
仿真器
ST Microelectronics STR730 设备
硬件配置
CAN硬件控制器
 
CAN消息缓存区大小 (FIFO 缓冲器)
使用配置向导
快速启用
仿真器
ST Microelectronics STR910 设备
硬件配置
CAN消息缓存区大小 (FIFO 缓冲器)
使用配置向导
快速启用
Atmel AT91SAM7X 设备
硬件配置
CAN硬件控制器
CAN消息缓存区大小 (FIFO 缓冲器)
使用配置向导
快速启用
初始化
工程示例
例程
RTX_ex1
File_ex1
HTTP_demo
HTTP_demo
网络配置
测试HTTP_demo
Telnet_demo
网络配置
TFTP_demo
库函数参考
数据类型
BIT
BOOL
CAN_ERROR
CAN_msg
FILE
S8
S16
S32
S64
U8
U16
U32
U64
包含文件
can_cfg.h
can_error.h
file_config.h
net_config.h
rtl.h
rtx_can.h
rtx_config.h
stdio.h
参考
_alloc_box
_calloc_box
_declare_box
_declare_box8
_free_box
_init_box
_init_box8
arp_cache_ip
CAN_init
CAN_receive
CAN_request
CAN_rx_object
CAN_send
CAN_set
CAN_start
CAN_tx_object
cgi_func
cgi_process_data
cgi_process_var
com_getchar
com_putchar
com_tx_active
dhcp_disable
fanalyse
fcheck
fclose
fdefrag
fdelete
feof
ferror
ffind
fflush
fformat
ffree
fgetc
fgets
finit
fopen
fprintf
fputc
fputs
fread
frename
fs_EraseSector
fs_get_date
fs_get_time
fs_Init
fs_ProgramPage
fscanf
fseek
ftell
fwrite
get_host_by_name
http_get_info
http_get_lang
http_get_session
http_get_var
init_ethernet
init_modem
init_serial
init_TcpNet
int_disable_eth
int_enable_eth
_ethernet
isr_evt_set
isr_mbx_receive
isr_mbx_send
isr_sem_send
main_TcpNet
mci_init
mci_read_config
mci_read_sect
mci_write_sect
modem_dial
modem_hangup
modem_listen
modem_online
modem_process
modem_run
os_dly_wait
os_evt_clr
os_evt_get
os_evt_set
os_evt_wait_and
os_evt_wait_or
os_itv_set
os_itv_wait
os_mbx_check
os_mbx_declare
os_mbx_init
os_mbx_send
os_mbx_wait
os_mut_init
os_mut_release
os_mut_wait
os_sem_init
os_sem_send
os_sem_wait
os_sys_init
os_sys_init_prio
os_sys_init_user
os_tmr_call
os_tmr_create
os_tmr_kill
os_tsk_create
os_tsk_create_ex
os_tsk_create_user
os_tsk_create_user_ex
os_tsk_delete
os_tsk_delete_self
os_tsk_pass
os_tsk_prio
os_tsk_prio_self
os_tsk_self
poll_ethernet
ppp_close
ppp_connect
ppp_is_up
ppp_listen
rewind
send_frame
slip_close
slip_connect
slip_is_up
slip_listen
smtp_cbfunc
smtp_connect
spi_hi_speed
spi_init
spi_send
tcp_abort
tcp_check_send
tcp_close
tcp_connect
tcp_get_buf
tcp_get_socket
tcp_get_state
tcp_listen
tcp_max_dsize
tcp_release_socket
tcp_send
tftp_fclose
tftp_fopen
tftp_fread
tftp_fwrite
timer_tick
tnet_cbfunc
tnet_ccmp
tnet_get_info
tnet_process_cmd
tnet_set_delay
tsk_lock
tsk_unlock
udp_close
udp_get_buf
udp_get_socket
udp_open
udp_release_socket
udp_send
ungetc
库文件
附录
A. μVision 调试对话框
B. 术语表
ARM Development Tools Page 1 of 2 ARM 开发工具集 Keil公司开发的ARM开发工具MDK(Microcontroller Development Kit),是 用来开发基于ARM核的系列微控制器的嵌入式应用程序。它适合不同层次的开 发者使用,包括专业的应用程序开发工程师和嵌入式软件开发的入门者。MDK 包含了工业标准的Keil C编译器、宏汇编器、调试器、实时内核等组件,支持所 有基于ARM的设备,能帮助工程师按照计划完成项目。 Keil ARM开发工具集集成了很多有用的工具,如下图所示,正确的使用它 们,可以有助于快速完成项目开发。 Part Number MDK- ARM2,3 DB-ARM Components µVision IDE RealView C/C++ Compiler RealView Macro Assembler RealView Utilities RTL-ARM Real-Time Library µVision Debugger GNU GCC1 注意 u µVision IDE集成开发环境和µVision Debugger调试器可以创建和测试 应用程序,可以用GNU ARM ADS或者RealView的编译器来编译这些 应用程序; u MDK-ARM是PK-ARM的一个超集; u AARM汇编器、CARM C编译器、LARM连接器和OHARM目标文件 到十六进制的转换器仅包含在MDK-ARM开发工具集中。 除了上表所列工具外,Keil 还提供以下工具: mk:@MSITStore:M:\Keil\ARM\Hlp\armtools.chm::/armtools.htm 2009-2-25
ARM Development Tools Page 2 of 2 ULINK USB-JTAG Adapter 用于通过JTAG调试和烧写程序。 MCB2100 Evaluation Boards 用于测试基于Philips LPC2100系列设备的应用 程序。 MCB2103 Evaluation Boards用于测试基于Philips LPC2103系列设备的应用 程序。 MCB2130 Evaluation Boards 用于测试基于Philips LPC2130系列设备的应用 程序。 MCB2140 Evaluation Boards 用于测试基于Philips LPC2140系列设备的应用 程序。 MCB2300 Evaluation Boards 用于测试基于Philips LPCLPC2300系列设备的 应用程序。 MCBSTM32 Evaluation Boards用于测试基于STMicroelectronics STM32 系列 设备的应用程序。 MCBSTR7 Evaluation Boards 用于测试基于STMicroelectronics STR7系列设 备的应用程序。 MCBSTR730 Evaluation Boards 用于测试基于STMicroelectronics STR730系 列设备的应用程序。 MCBSTR9 Evaluation Boards 用于测试基于STMicroelectronics STR9系列设 备的应用程序。 RTL-ARM Real-Time Library 用于建立实时库。RTL-ARM 包含用于嵌入式 应用开发的Flash文件系统、TCP/IP协议栈。 Copyright (c) Keil - An ARM Company. All rights reserved. mk:@MSITStore:M:\Keil\ARM\Hlp\armtools.chm::/armtools.htm 2009-2-25
GSARM: Getting Started User's Guide Page 1 of 9 基于µVision的RealView编译工具概 述 本用户指南提供了有关RealView编译工具的说明,它是RealView 微控制器开发工具集的一部分。 本指南包括如下小节: 介绍 部分对RealView编译工具进行了概述。 嵌入式程序 给出了创建面向微控制器的应用程序所需的内容。 从CARM移植 部分说明了如何将Keil CARM下的程序移植到RealView下。 修订历史 2006.6: 第一版. 2007.7: 添加了non-volatile memory, at attribute,和 multiple memory regions。 Copyright (c) Keil - An ARM Company. All rights reserved. 介绍 此用户指南是RealView微控制器开发工具集的一部分,它介绍了如何使用RealView编译工具创建 高效的嵌入式程序。对以前使用过Keil CARM编译器的用户来说,它介绍如何将CARM应用程序移 植到RealView编译工具下。 RealView编译工具是ARM公司15年来深入研发的结果。RealView微控制器开发集(RealView Microcontroller Development Kit) 涵盖了如下RealView编译工具组件。在µVision中的Project Workspace - Books页中可以看到有关这些产品的详细的PDF手册。 RealView 编译工具产品 C/C++ 编译器 C/C++运行时库 RogueWave C++ 标准模板库 Macro Assembler(宏汇编器) Linker/Locater(链接器/定位器) Library Manager (库管理) HEX File Creator (十六进制文件生成器) 用户手册 RV 编译器和库(RV_CC.PDF) RV 编译器和库 (RV_CC.PDF) RV 编译器和库 (RV_CC.PDF) RV 汇编器 (RV_ASM.PDF) RV 链接器/工具 (RV_Link.PDF) RV 链接器/工具 (RV_Link.PDF) RV 链接器/工具 (RV_Link.PDF) RealView编译工具被工业界认为是最能够充分发挥基于ARM体系结构处理器性能的编译器。编译 器能生成更小的代码映像,可帮助设计人员开发最紧凑的代码,这将大大降低产品成本。该编译 器能够生成面向32-bit ARM 和16-bit Thumb指令集的代码,并支持完全ISO标准的C和C++。 RealView 编译工具在减少程序代码和提高执行速度两个方面同时进行了优化。下图显示了在过去7 年内这两方面的改进。 file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh... 2009-2-25
GSARM: Getting Started User's Guide Page 2 of 9 RealView微控制器开发工具集有评估版(Evaluation Version)和完整版(Full Version)两个版本可 用。其中评估版的限制如下: 产生的应用程序ROM映像的大小被限制在16KB内。 链接器不能使用分散加载文件(scatter-loading description files)以进行复杂的存储设计。 代码/常量的基地址被限制为0xXX000000、0xXX800000或0x00080000,其中XX为00, 01, ..., FF。因此,存储的开始地址必须类似为0x00000000、 0x12800000等。 不可能产生位置独立的代码或数据。 汇编器不产生列表文件。 不能将此评估版用作商业目的。 嵌入式程序 使用 RealView微控制器开发工具集编写嵌入式程序是相对容易的,本节将介绍嵌入式应用开发所 需完成的工作: 启动代码(Startup Code)是在应用程序的main函数被调用前进行一些初始化工作。此外,它还 为内存分配函数定义的栈空间及内存堆。 Retarget库文件 为硬件的I/O口配置C运行时库。 链接器配置(Linker Configuration) 定义的目标硬件的存储映像。µVision可以自动生成工程 所需的链接配置文件。 此外,还要做如下几个指定的工作: 定位程序代码、常量或变量到指定的存储区。 中断服务程序可在直接使用__irq 关键字用C语言来写。启动代码中包含了所需的中断微量的 重定位。对一些设备和FIQ中断,需对启动代码进行调整。 向应用程序中添加软件中断处理(Software Interrupt Handler) ,它是应用程序中SWI函数的 入口地址。 定位变量到绝对地址。 使用non-vlatile存储区。 file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh... 2009-2-25
GSARM: Getting Started User's Guide Page 3 of 9 RealView 微控制器开发工具集针对不同的硬件平台提供了几个启动代码文件及例程,可以在如下 几个文件夹下后到这些文件: 文件夹 C:\KEIL\ARM\Startup C:\KEIL\ARM\Examples C:\KEIL\ARM\Boards 内容 基于RealView编译工具的启动代码文件. 基于RealView编译工具的通用例程. 基于RealView编译工具的板级例程. 启动代码(startup code) 启动代码用于初始化CPU以与硬件设计的配置相匹配,参阅开始使用ARM开发工具集用户指南, CPU启动代码 可以获取有关启动代码完成任务的详细信息。 不同系列的设备有不同的启动代码。文件夹\ARM\Startup 包含了基于 RealView编译工具的一些 启动代码,它被配置成适用于不同的硬件平台。当创建一个新的工程时,启动代码被自动地拷贝 到用于配置文件的工程文件夹下。 大多数启动文件为设备配置提供了符号定义,可以在 µVision的Project - Options - Asm - Define下 键入这些符号。 下面是常用的选项: REMAP: 在某些设备上执行存储映射。 EXTMEM_MODE: 配置为从片外Flash ROM执行代码。 RAM_MODE: 配置为从RAM执行代码。 RAM_INTVEC: 执行重映射并拷贝中断向量。 有关变量SET符号的详细说明及相关配置选项在启动代码文件中提供。 对由µVision自动生成的链接器配置来说,要求启动代码本身位于Reset段内,且中断向量表位于标 号Reset_Handler (代表CPU重启地址)处。 例子: : : AREA Reset, CODE, READONLY : : EXPORT Reset_Handler Reset_Handler ; CPU Reset Handler (executed after CPU Interrupt) 注意 文件夹\ARM\Startup 下的所有启动代码都是按此方法配置。 Retarget库文件 RealView微控制器开发工具集带有一个预定义的retarget库文件,它是许多例程的一部分。 retarget 文件修改了底层的I/O 程序,并禁止了semi-hosting SWI 中断的使用。 file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh... 2009-2-25
GSARM: Getting Started User's Guide Page 4 of 9 在 ..\ARM\Startup 文件夹下提供了RETARGET.C模板文件,此模板文件实现了所需的字符I/O函 数的功能如printf和scanf。 /******************************************************************************/ /* RETARGET.C: 'Retarget' layer for target-dependent low level functions */ /******************************************************************************/ #include #include #include #pragma import(__use_no_semihosting_swi) // disable semihosting #include // device specific header file /* Send a character via a UART channel */ int sendchar (int ch) { // implementation depends on the microcontroller hardware if (ch == '\n') { while (!(U1LSR & 0x20)); U1THR = CR; /* output CR */ } while (!(U1LSR & 0x20)); return (U1THR = ch); } /* Get a character via a UART channel */ int getkey (void) { // implementation depends on the microcontroller hardware while (!(U1LSR & 0x01)); return (U1RBR); } struct __FILE { int handle; /* Add whatever you need here */ }; FILE __stdout; FILE __stdin; // simplified fputc version that only redirects STDOUT int fputc(int ch, FILE *f) { // redirect STDOUT return (sendchar(ch)); } // simplified fgetc version that only redirects STDIN int fgetc(FILE *f) { // redirect STDIN return (sendchar(getkey())); } int ferror(FILE *f) { /* Your implementation of ferror */ return EOF; } void _ttywrch(int ch) { sendchar (ch); } file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh... 2009-2-25
GSARM: Getting Started User's Guide Page 5 of 9 void _sys_exit(int return_code) { while (1); /* endless loop */ } 注意: 更多有关retarge库文件的知识在RV Compiler and Library User's Guide, The C and C++ Libraries, Tailoring the C library to a new execution environment下提供。 链接器配置 使用Project - Options for Target - Target 对话框可以指定嵌入式系统的所有可用的存储域。 当使能Project - Options for Target - Linker下的Use Memory Layout from Target Dialog时, µVision会自动生成分散加载描述文件(scatter-loading description files )。 使能存储器为Read/Only 和Read/Write,它作为应用中的默认存储域。只要不用Options - Properties对话框把源文件或组分配到指定的存储域,默认存储域将用于存储应用程序。 用于选择存储启动代码的存储域。这将意味着此存储空间存储了重启(reset)和中断向量表,链 接器会在启动阶段(在进入主程序以前)把所有启动代码分配到此存储域内。 NoInit 复选框用于对某存储域禁止0初始化。需要注意的是在C源程序中仍然需要0(zero_init) 初始化。相关解释见禁止零初始化 。 注意: 默认的read/only存储域用于存储程序的初始化数据及分配到RAM中的程序代码和常量。 RealView微控制器开发集的评估板不支持分散加载描述文件。 有关分散加载描述文件请参阅RV Linker and Utilities User's Guide, Using Scatter-loading file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh... 2009-2-25
GSARM: Getting Started User's Guide Page 6 of 9 Description Files。 分散加载描述文件以target_name.SCT文件名存储在目标文件夹下(Object File folder)。可以对 其进行编辑,在Project - Options for Target - Linker对话框下,禁止Use Memory Layout from Target Dialog 并在Scatter File下键入所需文件。 散列载入描述文件例子 ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* LR_ROM1 0x01000000 0x00010000 { ; load region ER_ROM1 0x01000000 { ; load address = execution address *.o (RESET, +First) * (+RO) } RW_IRAM1 0x00000020 0x00001FE0 { ; RW data * (+RW +ZI) } } 指定存储域 在Project Workspace下使用快捷键可在打开Options - Properties对话框,在此对话框中可以为源文 件或组指定存储域。 在Options - Properties 对话框下可以将Code / Const, Zero Initialized Data,和 Other Data 分配到在 Project - Options for Target - Target对话框中定义的各种存储域中。 注意: 当RAM 被用作Code / Const 时,__main 初始化会将程序代码和常量拷贝到此RAM区并执 行。映像文件存储在Project - Options for Target - Target对话框中指定的默认存储域内。 这样的设置用于为链接器产生分散加载文件。如果禁止Project - Options for Target - Linker,此设置会被忽略。 此特性在RealView微控制器开发工具集的评估版下不可用。 中断服务程序 file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh... 2009-2-25
分享到:
收藏