62 lines
1.2 KiB
C
62 lines
1.2 KiB
C
#ifndef libc_h__
|
|
#define libc_h__
|
|
|
|
|
|
|
|
// 定义设备文件
|
|
typedef struct
|
|
{
|
|
const char *name;
|
|
int (*open)(void);
|
|
int (*close)(void);
|
|
int (*putc)(int);
|
|
int (*getc)(void);
|
|
int (*write)(const void *,int);
|
|
int (*read)(void *,int);
|
|
|
|
}libc_device_file;
|
|
|
|
|
|
// 使用这个宏用于初始化
|
|
#define extern_device(name_,putc_,getc_,write_,read_)\
|
|
const char __libc_##name_[] __attribute__((section(".name"))) = #name_;\
|
|
__attribute__((used,section(".libc_dev"))) const libc_device_file __libc_dev_##name_ =\
|
|
{\
|
|
.name=__libc_##name_,\
|
|
.putc=putc_,\
|
|
.getc=getc_,\
|
|
.write=write_,\
|
|
.read=read_,\
|
|
};
|
|
|
|
|
|
// 使用这个宏用于初始化,包括打开关闭函数
|
|
#define extern_device2(name_,open_,close_,putc_,getc_,write_,read_)\
|
|
const char __libc_##name_[] __attribute__((section(".name"))) = #name_;\
|
|
__attribute__((used,section(".libc_dev"))) const libc_device_file __libc_dev_##name_ =\
|
|
{\
|
|
.name=__libc_##name_,\
|
|
.open=open_,\
|
|
.close=close_,\
|
|
.putc=putc_,\
|
|
.getc=getc_,\
|
|
.write=write_,\
|
|
.read=read_,\
|
|
};
|
|
|
|
|
|
#define dev(name_) __libc_dev_##name_
|
|
|
|
|
|
|
|
const libc_device_file *libc_find_dev(const char *name);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|