Chinaunix首页 | 论坛 | 博客
  • 博客访问: 189859
  • 博文数量: 79
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-25 14:40
文章分类
文章存档

2015年(1)

2014年(1)

2013年(2)

2012年(1)

2011年(5)

2010年(2)

2009年(6)

2008年(20)

2007年(27)

2006年(14)

我的朋友

分类:

2009-04-05 13:29:40

   一直以来,对于arm为啥要搞semihosting完全不理解,近来更是因为port过来的源代码里有一句printf搞得晕头转向:因为有printf这话,ads编译时把semihosting的代码编译进来了,导致生成的二进制烧写文件不能真正的启动起来,但仿真时又完全没有问题。经过深入的反汇编跟踪才知道原来是semihosting干的好事。直到把semihosting的代码完全去掉,系统才真的可以烧进flash里工作。
    经过这次折腾,也让我理解了semihosting是为啥目的设计的(至少知道它的部分功能。)简单点说,semihosting可以让你的嵌入式程序通过swi调用主机(你的开发pc)的功能。例如printf在打开semihosting时,能在ads的console里输出调试信息。通过这个swi,很多标准的c语言库都能被调用,当然调用的是主机的功能!
   为此我想到了两个很有意识的用处:
1 通过pc键盘输入信息给arm程序,既然printf能输出信息,那同理,getch和scanf也能从ads的console里得到键盘输入。实验了一下果然如此,所以当你的板卡的键盘不在时不要紧,用pc的键盘也一样可以调试你的程序。
2 让烧写flash的过程自动化。semihosting可以让你使用c的FILE功能打开你主机上的文件,读出或写入内容。于是你可以把编译后的bin文件自动读取到指定的内存段里,然后写入flash中。以往这个过程我都是通过adx里的load memory from file来实现的。这个苯办法用了3年了。
    当然在你生成最终的代码中别让semihosting被编译进去,否则你的麻烦就来了,呵呵。
阅读(3189) | 评论(2) | 转发(0) |
0

上一篇:宗教的荒谬

下一篇:趁生命气息逗留

给主人留下些什么吧!~~

chinaunix网友2009-11-02 00:25:21

axd的config target菜单可以

chinaunix网友2009-10-15 12:06:48

如何将nosemihosting改为semihosting呢 谢谢!!