栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

百问网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;
      
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/879540.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号