62 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.1 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
 | 
						|
 |