- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
嵌入式操作系统关于硬件重定向的问题.doc
硬件重定向
由semihosting知识可知,semihosting只是将目标系统中的IO请求交给了调试环境来处理,但是在嵌入式系统实际应用中,往往嵌入式系统和主机调试环境是独立的,而嵌入式系统又想使用标准输入输出中的库函数,这时就要使用硬件重定向技术。
应用程序中对外设的IO请求实际是对低层最基本IO硬件的封装,例如printf()函数,其实是对将数据写入到显示器相应寄存器的抽象封装,用户不用关心具体使用了什么硬件机制,也不用关心具体怎么将其打印到屏幕上。在ADS开发环境中,semihosting低层也进行了封装。在嵌入式应用系统中,常常需要重新实现一些低级的IO功能,以适应目标系统的具体情况。像这种将底层IO由其它硬件来实现的重定向机制叫做硬件重定向。如图3-15所示。
图3-15底层IO重定向
Semihosting将底层基本IO函数进行了封装,默认的semihosting模式下,底层基本IO都是针对显示器,键盘等硬件进行了封装,实现了对显示器,键盘输入等硬件的驱动,IO操作等。用户可以自己定义底层的基本IO函数,来实现目标开发板上IO硬件的驱动和IO操作,并且告之连接器,在连接程序时连接用户自己定义底层基本IO函数,而不是默认的调试环境下的底层基本IO函数。这样目标开发板运行应用程序中的IO操作就被重新定向到了自己的硬件上了。例如:标准输出函数printf()的底层基本IO函数是fputc(),它是向硬件里写入一个字符函数,用户自己将该函数重写,在fputc()里面实现向UART串口打印字符,而不是打印到标准输出显示器上。这样一来, printf()系列函数的输出都被重定向到UART串口上去了。
实现硬件重定向时有以下几点需要注意:
(1) 声明不使用semihosting SWI来请求host主机IO操作,而是使用自定义IO操作
(2) 驱动重定向硬件设备
(3) 重写低级IO函数
硬件重定向实验
该程序文件主要用于启动处理,声明不使用semihosting SWI来请求host主机IO操作,关闭看门狗,初始化内存,最后跳入到main函数中执行。由于程序本身实现了reg_init_no_pll.txt脚本文件的功能,因此本实验不需要加载初始化脚本。
AREA Init, CODE, READONLY
; 确保不使用系统C库中的底层IO函数接口,而是使用用户自己定义IO接口
IMPORT __use_no_semihosting_swi
ENTRY
EXPORT Reset_Handler
Reset_Handler
; 关闭看门狗
ldr r0, = 0 mov r1, #0
str r1, [r0]
bl initmem
IMPORT __main
B __main ; 使用B指令跳入main,而不使用BL指令,因为不需要返回
initmem
ldr r0, =0 ldr r1, =0 adr r2, memdata
initmemloop
ldr r3, [r2], #4
str r3, [r0], #4
teq r0, r1
bne initmemloop
mov pc,lr
memdata
DCD 0 ;BWSCON
DCD 0 ;BANKCON0
DCD 0 ;BANKCON1
DCD 0 ;BANKCON2
DCD 0 ;BANKCON3
DCD 0 ;BANKCON4
DCD 0 ;BANKCON5
DCD 0 ;BANKCON6
DCD 0 ;BANKCON7
DCD 0x
文档评论(0)