历史上的今天
今天是: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这 个声明,使程序遇到这些文件操作函数时不停在此中断处,具体操作如下,将下列程序加入你的工程中:
#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)
{
}"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;
}
这样即可。
史海拾趣
|
小弟想用两节干电池做单片机开发板的电源,不知可行不? 自己的开发板用的是L7805AC稳压的,现在准备绕过7805 看了数据手册说7805输出1A电流,不过我猜开发板应该不用这么大的电流 小弟也查了一下DC-DC升压芯片最大只有500mA 请各位高手帮帮小 ...… 查看全部问答> |
|
符合 iso7816标准 ic卡 接口驱动 怎么设计 原理是什么? 请教各位 符合 iso7816标准ic卡 接口驱动 怎么设计 原理是什么? 我想在用ARM7上做个ic卡的读写器,卡是接触式的,对于接口驱动应该如何设计,原理是什么,本人是新手,所以请大家多多赐教… 查看全部问答> |
|
高手解惑,关于 镜像 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 待遇面谈。… 查看全部问答> |




