Chocore 发表于 2011-10-13 15:20:56

【学习笔记之Semihosting】CoIDE 1.3.1即将发布,新增支持Semihosting功能

CooCox将于下周发布CoIDE 1.3.1,除修复之前提过的部分BUG外,还将增加Semihosting等功能。

Ps:CoIDE中新唐库已升级到最新版,新唐组件也已更新。点击组件页右上角刷新按钮,有更新的组件右侧会显示Update,点击即可更新。

敬请关注CooCox——免费和开源的ARM Cortex M3&M0开发工具

下面是Semihosting学习笔记。

****************Quoted from http://forum.eepw.com.cn/thread/90669/1****************

1、ARM公司对Semihosting的中文解释是半主机机制。为什么叫半主机呢?主要是指应用程序的代码运行在目标系统上,当需要类似PC平台下的控制台输入输出时,会调用Semihosting去利用PC上的控制台输入输出设备:如打开关闭文件,PC显示器输出,键盘输入等等。

2、Semihosting在ADS1.2的开发环境下,只能在以下调试代理上运行,ARMulator, RealMonitor, Multi-ICE以及Angle。这就是为什么周工的EasyJTAG不支持Semihosting的原理,因为它不属于上述四种调试代理中的任何一种。

3、Semihosting是一段功能代码,这段功能代码主要运行在PC上,并由调试工具上的固件来激活调用。而周工的EasyJTAG没有实现这个激活调用功能。

4、对于开发用户来说,Semihosting是目标系统通过调用SWI0x123456或 SWI 0xAB来调用的。前者ARM状态下的专用操作号,后者是THUMB状态的专用操作号。当开发者的软硬件调试工具配置正确时,可以正确执行Semihosting功能。打个比方说,你在ARMulator下仿真指令
MOV   R1, 0x18
SWI   0x123456
ARMulator会正确终止你的程序执行。
而在EasyJTAG下仿真时,却会跳入0x08的异常向量入口处。

**********Quoted from http://blog.sina.com.cn/s/blog_6bec9cbc0100mpp3.html***********

Semihosting主要是针对I/O操作的,在嵌入式开发过程当中,通过Semihosting,可以把输入输出定向到HOST上,利用HOST的输入和输出。

从用户的角度来看,printf好像和普通的一样,关键的区别在于printf的实现。一般的调试器都提供两个版本的IO库,一个式标准的库,另外一个是支持Semihosting的库。其实现有区别。下面以printf举例说明其原理:

支持Semihosting的printf的实现和标准的printf不同,支持Semihosting的printf用SWI指令来通知仿真器。仿真器在地址0x8处设置断点,但SWI指令执行后,仿真器可以捕获到该SWI指令。根据SWI的number来判断这个SWI是不是Semihosting请求,如果是,再根据具体的Semihosting number响应用户的Semihosting请求,完成用户的Semihosting请求后,返回到SWI的后面一条指令,继续执行。所以,对用户来说,这是透明的。

/**********
文档:《基于ARM的Semihosting的分析与实现》

zhongyiming 发表于 2011-10-13 16:06:46

又进步了!再接再励!
1.希望用COIDE平台上添加ui设计器插件;
2.加强cox构架功能,跟上潮流;
3.进入退出调试更快更可靠!

Chocore 发表于 2011-10-14 11:37:20

回复【1楼】zhongyiming
-----------------------------------------------------------------------

./emotion/em007.gif多谢关注和支持!~

1. 会予以考虑;
2. 新版COX已经发布了,见http://www.coocox.org/COX.html;
3. 会努力的。
页: [1]
查看完整版本: 【学习笔记之Semihosting】CoIDE 1.3.1即将发布,新增支持Semihosting功能