历史上的今天
返回首页

历史上的今天

今天是:2024年10月08日(星期二)

正在发生

2018年10月08日 | keil编译出错关于__use_no_semihosting_swi的使用

2018-10-08 来源:eefocus

__use_no_semihosting_swi,即不使用半主机模式,防止程序进入软件中断。


1.在嵌入式程序编译时如果出现printf、fopen、fclose等文件操作,因程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断BAEB处,这时就需要__use_no_semihosting_swi这 个声明,使程序遇到这些文件操作函数时不停在此中断处,具体操作如下,将下列程序加入你的工程中:


  1. #pragma import(__use_no_semihosting_swi)  

  2. #pragma import(_main_redirection)  

  3.   

  4.   

  5. const char __stdin_name[150];  

  6. const char __stdout_name[150];  

  7. const char __stderr_name[150];  

  8. typedef int FILEHANDLE;  

  9.   

  10. //重写标准库函数,这时printf、fopen、fclose等文件操作函数运行时就会调用你的重写函数,这些重写函数只是几个简单的例子,并没有重写所有的文件操作函数  

  11. void _sys_exit(int status)  

  12. {  

  13.     while(1);  

  14. }  

  15. FILEHANDLE _sys_open(const char *name, int openmode)  

  16. {  

  17.     return 0;  

  18. }  

  19.   

  20. int _sys_close(FILEHANDLE fh)  

  21. {  

  22.     return 0;  

  23. }  

  24.   

  25. int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)  

  26. {  

  27.     return 0;  

  28. }  

  29.   

  30. int _sys_read(FILEHANDLE fh, unsigned char*buf, unsigned len, int mode)  

  31. {  

  32.     return 0;  

  33. }  

  34.   

  35. int _sys_istty(FILEHANDLE fh)  

  36. {  

  37.     return 0;  

  38. }  

  39.   

  40. int _sys_seek(FILEHANDLE fh, long pos)  

  41. {  

  42.     return 0;  

  43. }  

  44.   

  45. int _sys_ensure(FILEHANDLE fh)  

  46. {  

  47.     return 0;  

  48. }  

  49.   

  50. long _sys_flen(FILEHANDLE fh)  

  51. {  

  52.     return 0;  

  53. }  

  54.   

  55. int _sys_tmpnam(char *name, int fileno, unsigned maxlength)  

  56. {  

  57.     return 0;  

  58. }  

  59.   

  60. void _ttywrch(int ch)  

  61. {  

  62. }"code" class="cpp">time_t time(time_t *t)  

  63. {  

  64.     return 0;  

  65. }  

  66. int remove(const char *filename)  

  67. {  

  68.     return 0;  

  69. }  

  70.   

  71. char *_sys_command_string(char *cmd, int len)  

  72. {  

  73.     return 0;  

  74. }  

  75.   

  76. clock_t clock(void)  

  77. {  

  78.     return 0;  

  79. }  


 

若出现如下编译错误:Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _ttywrch was referenced,此时你只需重写_ttywrch 函数即可

void _ttywrch(int ch){}。

2.__use_no_semihosting_swi也常用于对printf的重定向,通常是重定向到串口输出,这时只需在1中的重写函数中加入:

int fputc(int ch, FILE *f)

uart_send_char(ch);//你的串口发送字符函数  
return ch;
}

这样即可。


推荐阅读

史海拾趣

德旭电子(DEXU)公司的发展小趣事

随着公司规模的不断扩大和业务范围的不断拓展,德旭电子开始注重履行社会责任和推动可持续发展。公司积极参与公益事业和社会活动回馈社会。

在环保方面德旭电子坚持绿色生产和低碳发展理念积极推广环保技术和设备降低生产过程中的能耗和排放。同时公司还注重产品的环保性能研发和生产符合环保标准的产品满足客户的环保需求。

在社会责任方面德旭电子关注员工福利和职业发展为员工提供良好的工作环境和培训机会促进员工的成长和发展。此外公司还积极参与社会公益事业和慈善活动为社会做出积极贡献。

通过这些举措德旭电子在履行社会责任和推动可持续发展方面取得了显著成效赢得了社会的广泛认可和赞誉。

D1 International Inc公司的发展小趣事

在快速扩张的过程中,D1 International Inc公司始终坚守品质管理的原则。公司严格把控产品的每一个环节,从原材料采购到生产流程,再到最终的产品检验,都力求做到精益求精。这种对品质的执着追求,使得D1 International Inc公司的产品在市场上赢得了良好的口碑,也为公司的长期发展提供了有力保障。

DILABS公司的发展小趣事

随着公司规模的扩大,DILABS开始意识到品质控制的重要性。他们引进了先进的生产设备和管理系统,确保每一款产品的质量都达到行业最高标准。同时,DILABS还加大了品牌宣传力度,通过参加国际展会、发布技术白皮书等方式,逐步建立起公司在电子行业中的品牌形象。

永源微电子(APM)公司的发展小趣事

2023年,永源微电子成功完成了A轮融资,这是公司发展过程中的一个重要里程碑。此次融资由深圳英集芯科技股份有限公司领投,为公司带来了丰富的资金支持和市场资源。通过与英集芯科技的战略合作,永源微电子在微电子领域的技术创新和产品研发上取得了新的突破。双方共同开展研发项目,推动技术的突破和应用场景的拓展,为公司的未来发展注入了强大的动力。

Aristo-Craft/ L M P Inc公司的发展小趣事

随着科技的进步,Aristo-Craft/L M P Inc公司意识到要想在行业中保持领先地位,必须不断进行技术创新和产品升级。公司投入大量资源进行研发,成功推出了一系列具有创新性的电子产品,如高性能的集成电路、先进的通信设备等。这些产品不仅提高了公司的市场竞争力,还为客户带来了更好的使用体验。

Gennum ( Semtech )公司的发展小趣事
用于实现整流、稳压等功能,也可能用于保护电路中的其他元件。

问答坊 | AI 解惑

设计两节干电池的单片机开发板电源

小弟想用两节干电池做单片机开发板的电源,不知可行不? 自己的开发板用的是L7805AC稳压的,现在准备绕过7805 看了数据手册说7805输出1A电流,不过我猜开发板应该不用这么大的电流 小弟也查了一下DC-DC升压芯片最大只有500mA 请各位高手帮帮小 ...…

查看全部问答>

符合 iso7816标准 ic卡 接口驱动 怎么设计 原理是什么?

请教各位 符合 iso7816标准ic卡 接口驱动 怎么设计 原理是什么? 我想在用ARM7上做个ic卡的读写器,卡是接触式的,对于接口驱动应该如何设计,原理是什么,本人是新手,所以请大家多多赐教…

查看全部问答>

串口通讯校验码问题

截取了一款手机发送的指令码如下: 4b 00 21 27  00 01 00 8b  97 7e 4b 00 21 27  00 02 00 e3  bd 7e 4b 00 21 27  00 07 00 5b  c3 7e 4b应该是指令代码 8b 97 之类的是校验 ...…

查看全部问答>

PB中关于环境变量设置的问题

{5D8C1CC7-BB94-4A0D-9942-DC6888556665}…

查看全部问答>

高手解惑,关于 镜像 bib 内存映射 bootloader 的问题

我现在用 TI 的 OMAPV1030 遇到一个不解的问题 这个芯片物理地址是这样的: 0x0000 0000 - 0x0000 5FFF 24K ROM code ... 0x0C00 0000 - 0x0FFF FFFF 64M nand flash ... 0x1000 0000 - 0x13FF FFFF 64M 外部 RAM ... 0x2000 0000 - 0x200 ...…

查看全部问答>

多功能家电保护电路图

本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 电路如图所示,它由直流稳压电路、延时电路、过压欠压保护和执行电路等部分构成。ICl集成稳压电路LM7812输出+12V电压。欠压和过压的取样保护电路由R2、电位器RP2、稳压管DWl、VTl和Rl、RPl、DW ...…

查看全部问答>

招聘单片机程序开发员 (广州)

要求:1.电子计算机或自动化控制等相关专业大专以上学历。1.对嵌入式单片机开发有浓厚的兴趣。2.用C语言编写过单片机的程序等相关经验。3.用Protel99画过PCB图,原理图。4.擅长文字表达,书写说明书。简历发送到zhqf911@163.com 待遇面谈。…

查看全部问答>

arm软件仿真

暂时买不起开发板,只好软件仿真了,求指点,用什么进行编程和硬件仿真好???各位大哥,发挥你们的小宇宙帮帮我吧!!!…

查看全部问答>