百问网7天物联网smarthome学习笔记5之建立IO设备和网络设备

半主机模式

  • 半主机模式是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;
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值