前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tello SDK封装Arduino版本(源码阅读).1

Tello SDK封装Arduino版本(源码阅读).1

作者头像
云深无际
发布2021-12-01 22:07:29
5750
发布2021-12-01 22:07:29
举报
文章被收录于专栏:云深之无迹云深之无迹

在去年的时候,我就开过一个专栏,就是试图找出Arduino的构成,就是代码的组织,一个硬件库的打包等。可以后来平台没有给我专辑,我就没有再写了,但是最近又拾起来了,所以想开一个新的专辑。老办法,还是读TT的相关的库,除了官方的,还有第三方的。试图从源码中挖掘语言的含义。

就是这样的,Github下载下来的ESP32 Arduino内核+第三方的一些TT库

然后把官方的库放到我们的内核里面

库的内容

用VSCode打开,正在分析

代码语言:javascript
复制
long map(long x, long in_min, long in_max, long out_min, long out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

我们今天读一个简单的TT包装程序

库之间有重合

TT库的包装头

  1. 实现了连接状态的管理
  2. 发送指令
  3. 打印wifi的状态
  4. 获取无人机的回复信息
  5. 还有一些私有的方法

这个有点像This指针,指向自己

代码语言:javascript
复制
using string  = basic_string<char, char_traits<char>, allocator<char>>;
代码语言:javascript
复制
class WiFiUDP : public UDP

WIFIUDP继承至UDP

代码语言:javascript
复制
class UDP : public Stream

UDP继承至stream

代码语言:javascript
复制
class Stream: public Print

stream继承至print

我悟了,这就是继承吗?

故事的终点在Print

代码语言:javascript
复制
size_t Print::printNumber(unsigned long n, uint8_t base)
{
    char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
    char *str = &buf[sizeof(buf) - 1];
    *str = '\0';
    // prevent crash if called with base == 1
    if (base < 2)
    {
        base = 10;
    }
    do
    {
        unsigned long m = n;
        n /= base;
        char c = m - base * n;
        *--str = c < 10 ? c + '0' : c + 'A' - 10;
    } while (n);
    return write(str);
}

这里是print的共有方法~

看这个子类的成员,IP地址

代码语言:javascript
复制
class IPAddress : public Printable

IP继承到这里

最终的终点

这是里面的变量类型的包装

看里面这个一对出现的方法,~是关闭这个方法的意思

在这里,其实我以前见过这个还挺疑惑的。。。

定义的普通的类型,先else子句里面的定义

我们这里也可以看下wifi库的继承类

网路的名字和密码

代码语言:javascript
复制
const char *ptr;

定义一个指向字符常量的指针,这里,ptr是一个指向 char* 类型的常量,所以不能用ptr来修改所指向的内容,换句话说,*ptr的值为const,不能修改。但是ptr的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对ptr而言,这个值是常量。

代码语言:javascript
复制
boolean connected;

布尔代数的话也有相应的类型定义

代码语言:javascript
复制
const char *udpAddress = "192.168.10.1";
const int udpPort = 8889;

IP和端口

::的作用都是为了更明确的调用自己的对象或者函数。

你看this->指向对象,指向的是下面的紫变量

当年没有C++编译器,只能通过C++转成C语言才编译。而C++中的class就被翻译C语言的struct,而struct没有成员函数,只能做全局函数。

而全局函数内无法直接调用struct类型变量内的成员,所以必须传一个struct指针,这个指针就是所谓的this指针。

那么this->加上成员名就是调用这个对象的成员了。

ip地址的配置,ip,网关,子网

看打印,调用了这个,串口

ESP32有三个串口,都是硬件的:

分别就是这样

代码语言:javascript
复制
class HardwareSerial : public Stream
// 继承关系。

串口也是这样的继承关系

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档