半主机模式
- 半主机模式是ARM架构中的概念
- 半主机模式中的printf和scanf需要开发者重定向底层IO函数fputc和fgetc
- 如果不使用半主机模式,则需要移除所有的半主机模式关联的函数后,再去重定向fputc和fgetc
- 半主机模式可参考手册《Semihosting for AArch32 and AArch64 》
Microlib
- Microlib 是一个比C库小很多的微库,对于IO功能定义了
__stdout
和__stdin
,用户重定向fputc和fgetc的时候无需再重新定义__stdout
和__stdin
。 - Microlib在有RTOS的情况下有些函数无法良好运转,因而需要谨慎考虑对它的使用。
- C库可参考手册《Arm C and C++ Libraries and Floating-Point Support User Guide》
网络连接相关函数说明
- wifi模块初始化Driver_Net_Init:串口初始化、接收环形缓冲区初始化、发送wifi模块初始化命令、延时一段时间(防止初始化信息淹没之后的回复报文)、设置wifi工作模式为station。
- wifi模块连接热点Driver_Net_ConnectWifi:发送相关AT指令。
- wifi模块与手机建立TCP连接Driver_Net_ConnectTCP
- wifi模块发送数据Driver_Net_TransmitSocket
设备层基于平台层,平台层基于驱动层
-
输入输出设备
-
结构体定义
typedef enum{ LED = 0, KEY = 1, DBGOUT = 2, }IODevType; typedef struct IODev{ IODevType Type; void(*Init)(struct IODev *dev);//调用平台层的初始化函数platform_io_init来实现 int(*Write)(struct IODev *dev, uint8_t *buf, uint16_t len);//调用平台层的函数platform_io_Write来实现 int(*Read)(struct IODev *dev, uint8_t *buf, uint16_t len);//调用平台层的函数platform_io_Read来实现 }IODev, *ptIODev;
-
-
网络设备
-
结构体定义
typedef enum{ ESP8266 = (1<<0), OTHERS = 0xFFFF, }NetDevType; typedef enum{ WiFi_ID = (1<<0), UDP_ID = (1<<1), TCP_ID = (1<<2) }ConnectID; typedef struct{ ConnectID id; char *ssid; char *pwd; }WiFiInfo; typedef struct{ ConnectID id; char *IP; unsigned short LocalPort; unsigned short RemotePort; }TCP_UDP_Info; typedef struct NetDev{ unsigned char Type; int(*Init)(struct NetDev *net);//调用平台层的初始化函数platform_net_init来实现 int(*Connect)(struct NetDev *net, const char *arg, int timeout);//调用平台层的函数platform_net_connect来实现 int(*Disconnect)(struct NetDev *net, const char *arg, int timeout);//调用平台层的函数platform_net_disconnect来实现 int(*Write)(struct NetDev *net, char *buf, unsigned short len, int timeout);//调用平台层的函数platform_net_write来实现 int(*Read)(struct NetDev *net, char *buf, unsigned short len, int timeout);//调用平台层的函数platform_net_read来实现 }NetDev, *ptNetDev;
-