1.
[C] 纯文本查看 复制代码 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_open 调用路径fopen->freopen->_sys_open->__sys_open,这里__sys_open应该就是rl-flashfs实现的,其中STDIN STDOUT STDERR这三个流rl-flashfs会自动创建吗,所以File_Configs中的Number of open files最小为4?
2.
[C] 纯文本查看 复制代码 int _sys_istty (FILEHANDLE fh) {
if (fh > 0x8000) {
return (1);
}
return (0);
}
_sys_istty这个函数是确认是否有类似打印设备,0x8000是设备地址?
3.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));
}
fprintf调用路径fprintf->fputc->fwrite->_sys_write,用的就是STDOUT,所以这里sendchar自己实现就可以用串口打印printf,如果直接重写fputc,那rl-flashfs就没法写了
4.标志输入和标志输出相同
5.void _sys_exit (int return_code) {
/* Endless loop. */
//while (1);
}
这个函数貌似应该不会调用,但是我现在的工程运行后就被调用了,所以把wihle注释了,这有什么影响吗
|