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

2021-12-01 22:07:29 浏览数 (1)

在去年的时候,我就开过一个专栏,就是试图找出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 = '';
    // 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
// 继承关系。

串口也是这样的继承关系

0 人点赞