forked from gary/BCU
2
0
Fork 0
BCU/library/rl_flashfs/Retarget.c

199 lines
4.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*********************************************************************************************************
*
* 模块名称 : 重定向文件
* 文件名称 : Retarget.c
* 版 本 : V1.0
* 说 明 : 此重定向文档串口和FlashFS都要使用。
* 1. FlashFS不支持使用MDK中的MicroLib功能不使用MicroLib的话默认半主模式是开启的
* 因此需要重新做重定向文件以支持串口打印和FlashFS的使用。
* 2. 本文件来自KEIL官方用户只需提供
* extern int sendchar (int ch);
* extern int getkey (void);
* 两个函数即可这两个函数在bsp_uart_fifo.c文件实现
*
* 修改记录 :
* 版本号 日期 作者 说明
* V1.0 2015-09-10 Eric2013 首发
*
* Copyright (C), 2015-2020, 安富莱电子 www.armfly.com
*
*********************************************************************************************************
*/
/*----------------------------------------------------------------------------
* RL-ARM - FlashFS
*----------------------------------------------------------------------------
* Name: RETARGET.C
* Purpose: Retarget low level functions
* Rev.: V4.20
*----------------------------------------------------------------------------
* This code is part of the RealView Run-Time Library.
* Copyright (c) 2004-2011 KEIL - An ARM Company. All rights reserved.
*---------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <rt_sys.h>
#include <File_Config.h>
#define STDIO
#pragma import(__use_no_semihosting_swi)
/* The following macro definitions may be used to translate this file:
STDIO - use standard Input/Output device
(default is NOT used)
*/
/* Standard IO device handles. */
#define STDIN 0x8001
#define STDOUT 0x8002
#define STDERR 0x8003
/* Standard IO device name defines. */
const char __stdin_name[] = "STDIN";
const char __stdout_name[] = "STDOUT";
const char __stderr_name[] = "STDERR";
struct __FILE { int handle; /* Add whatever you need here */ };
int sendchar(int ch)
{
return 0;
}
int getkey (void)
{
return 0;
}
/*--------------------------- _ttywrch --------------------------------------*/
void _ttywrch (int ch) {
#ifdef STDIO
sendchar(ch);
#endif
}
/*--------------------------- _sys_open -------------------------------------*/
FILEHANDLE _sys_open (const char *name, int openmode) {
/* Register standard Input Output devices. */
if (strcmp(name, "STDIN") == 0) {
return (STDIN);
}
if (strcmp(name, "STDOUT") == 0) {
return (STDOUT);
}
if (strcmp(name, "STDERR") == 0) {
return (STDERR);
}
return (__sys_open (name, openmode));
}
/*--------------------------- _sys_close ------------------------------------*/
int _sys_close (FILEHANDLE fh) {
if (fh > 0x8000) {
return (0);
}
return (__sys_close (fh));
}
/*--------------------------- _sys_write ------------------------------------*/
int _sys_write (FILEHANDLE fh, const U8 *buf, U32 len, int mode) {
#ifdef STDIO
if (fh == STDOUT) {
/* Standard Output device. */
for ( ; len; len--) {
sendchar (*buf++);
}
return (0);
}
#endif
if (fh > 0x8000) {
return (-1);
}
return (__sys_write (fh, buf, len));
}
/*--------------------------- _sys_read -------------------------------------*/
int _sys_read (FILEHANDLE fh, U8 *buf, U32 len, int mode) {
#ifdef STDIO
if (fh == STDIN) {
/* Standard Input device. */
for ( ; len; len--) {
*buf++ = getkey ();
}
return (0);
}
#endif
if (fh > 0x8000) {
return (-1);
}
return (__sys_read (fh, buf, len));
}
/*--------------------------- _sys_istty ------------------------------------*/
int _sys_istty (FILEHANDLE fh) {
if (fh > 0x8000) {
return (1);
}
return (0);
}
/*--------------------------- _sys_seek -------------------------------------*/
int _sys_seek (FILEHANDLE fh, long pos) {
if (fh > 0x8000) {
return (-1);
}
return (__sys_seek (fh, pos));
}
/*--------------------------- _sys_ensure -----------------------------------*/
int _sys_ensure (FILEHANDLE fh) {
if (fh > 0x8000) {
return (-1);
}
return (__sys_ensure (fh));
}
/*--------------------------- _sys_flen -------------------------------------*/
long _sys_flen (FILEHANDLE fh) {
if (fh > 0x8000) {
return (0);
}
return (__sys_flen (fh));
}
/*--------------------------- _sys_tmpnam -----------------------------------*/
int _sys_tmpnam (char *name, int sig, unsigned maxlen) {
return (1);
}
/*--------------------------- _sys_command_string ---------------------------*/
char *_sys_command_string (char *cmd, int len) {
return (cmd);
}
/*--------------------------- _sys_exit -------------------------------------*/
void _sys_exit (int return_code) {
/* Endless loop. */
while (1);
}
/*----------------------------------------------------------------------------
* end of file
*---------------------------------------------------------------------------*/