keil编译出错关于__use_no_semihosting_swi的使用
来源:互联网 发布:java程序员的职业规划 编辑:程序博客网 时间:2024/05/01 06:25
__use_no_semihosting_swi,即不使用半主机模式,防止程序进入软件中断。
1.在嵌入式程序编译时如果出现printf、fopen、fclose等文件操作,因程序中并没有对这些函数的底层实现,使得设备运行时会进入软件中断BAEB处,这时就需要__use_no_semihosting_swi这 个声明,使程序遇到这些文件操作函数时不停在此中断处,具体操作如下,将下列程序加入你的工程中:
#pragma import(__use_no_semihosting_swi)#pragma import(_main_redirection)const char __stdin_name[150];const char __stdout_name[150];const char __stderr_name[150];typedef int FILEHANDLE;//重写标准库函数,这时printf、fopen、fclose等文件操作函数运行时就会调用你的重写函数,这些重写函数只是几个简单的例子,并没有重写所有的文件操作函数void _sys_exit(int status){ while(1);}FILEHANDLE _sys_open(const char *name, int openmode){ return 0;}int _sys_close(FILEHANDLE fh){ return 0;}int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode){ return 0;}int _sys_read(FILEHANDLE fh, unsigned char*buf, unsigned len, int mode){ return 0;}int _sys_istty(FILEHANDLE fh){ return 0;}int _sys_seek(FILEHANDLE fh, long pos){ return 0;}int _sys_ensure(FILEHANDLE fh){ return 0;}long _sys_flen(FILEHANDLE fh){ return 0;}int _sys_tmpnam(char *name, int fileno, unsigned maxlength){ return 0;}void _ttywrch(int ch){}<pre name="code" class="cpp">time_t time(time_t *t){ return 0;}int remove(const char *filename){ return 0;}char *_sys_command_string(char *cmd, int len){ return 0;}clock_t clock(void){ return 0;}
若出现如下编译错误: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;
}
这样即可。
1 0
- keil编译出错关于__use_no_semihosting_swi的使用
- keil编译出错关于__use_no_semihosting_swi的使用
- Keil-原文件类型不明确导致编译出错的解决方法
- keil 安装ADS后编译出错
- 关于Keil如何设置只编译修改过的文件
- 关于javah编译出错的小问题
- 关于uvc_streamer编译出错
- KEIL 编译后的芯片资源使用情况
- 关于Java使用Ant打包,编译AIDL时出错的问题
- 使用QUdpSocket时编译出错的问题
- 关于Simplicity Studio使用math.h编译出错。
- KEIL 编译出错*** ERROR L107: ADDRESS SPACE OVERFLOW
- 关于keil中生成lib和使用的记录
- Keil的常见编译警告
- KEIL编译上的问题
- KEIL编译模式的选择
- 关于keil 自定义链接脚本 编译错误
- 关于keil编译cortex-m3纯汇编时为什么问题使用align地址问题
- Eclipse调试常用技巧
- 如何获得谷歌地图开发密钥
- 4.使用Maven的其他问题
- pip代理的使用方法
- Android关于java.lang.NoClassDefFoundError问题
- keil编译出错关于__use_no_semihosting_swi的使用
- Android平台Camera实时滤镜实现方法探讨(五)--GLSurfaceView实现Camera预览
- Day 7: GruntJS 在线重载 提升生产率至新境界
- JDBC连接MySQL数据库关键的四个步骤
- ps aux指令詳解
- @XmlAccessorType详解
- Leetcode战记day1 数根问题
- Tomcat bin的start.bat启动一闪而过的错误
- Android 文件系统及权限修改