​这个地方把ino后缀改成是cpp,不影响

Ardunio的编程语言,原型是wring

这个是官网的文章

https://github.com/arduino/arduino-cli

http://wiring.org.co/reference/https://blog.csdn.net/u011000290/article/details/50850171?utm_medium=distribute.pc_relevant.none-task-blog-title-6&spm=1001.2101.3001.4242https://arduino.github.io/arduino-cli/latest/sketch-build-process

虽然有注释,但是有点少.而且宏都是大写

一眼也看不出来,我处理一下

处理好了

这个地方是一些宏定义,在预编译阶段处理

首先是__name__这样的叫私有变量名,这里是开启esp32的uart0做debug用

具体这个我需要查esp32的资料

可以看到是串口1做了这个工作

这个SDK的版本是哪里

键盘双击的间隔时间

两个函数声明

控制LED屏幕还是灯的一个参数

查一下这个SDK的版本是什么意思

去到了官网,现在做的真漂亮

我们找ESP32,32的开发没有non-os,比较不开心

下文是具体的地址

https://github.com/espressif/esp-idf/releases/tag/v1.0

一直翻,到18年才是有了sdk1.0

所以我觉得不是这个版本号

可以稍微的看一眼日志

我们来找一下sdk_version的出现的位置,这个是第二次出现

是打印这个版本的信息。

这个地方是第三次打印,是在一个串口的一个循环里面会

这个地方是最后的一次出现

最左边出现这个红色的小杠,点一下。

会出现源码里面做出更改的地方

我这里用SI打开这个源码

起一个名字

然后选择源码的位置

选择Add Tree选择一下

此时这个地方显示ino文件

检测成了一个文本文件

改成cpp后缀,在文章的最前面我就说过了。

可以看到已经检测到了

有所有的函数列表

tof飞行距离一开始设置为0

这个程序写的还是有点东西的

一开始是一堆函数原型

而且在写法上面用空行分隔

对8x8的屏幕

tof传感器

版本函数

普通的函数

未知的版本

总之就是一堆回调函数,现在就是看个函数名字也不知道是什么,

继续分析会知道

这几个函数看不懂

这个是创建几个对象

RGB上面哪个灯

就是这个!

灯,矩阵灯

游戏手柄

Tof传感器

配对模式

可以用SDK去控制飞机飞行


到现在为止就创建了这么多的“对象”~~~

配对任务句柄

任务句柄

tof传感器电池读取的任务句柄

BLE低功率蓝牙的任务句柄

一个容纳128个值得数组

这个函数会返回传感器的距离

void IRAM_ATTR key_doubleclick(){    static uint32_t last_press_time = 0, now_press_time = 0;    static uint8_t key_toggle = 0;    uint32_t interval;    if (digitalRead(34) != 0)    {        return;    }    if (last_press_time == 0)    {        last_press_time = millis();    }    now_press_time = millis();    interval = now_press_time - last_press_time;    if ((interval > 50) && (interval < DOUBLECLICK_INTTERVAL_TIME))    {        if (!key_toggle)        {            CommonSerial.printf("[TELLO] motoron");#ifdef __DEFAULT_LOG__            Serial.printf("[TELLO] motoron");#endif        }        else        {            CommonSerial.printf("[TELLO] motoroff");#ifdef __DEFAULT_LOG__            Serial.printf("[TELLO] motoroff");#endif        }        key_toggle = !key_toggle;    }    last_press_time = now_press_time;}

这个程序比较长,我直接

先缩进看一看

键双击?

什么时候使用iram_attr


你提出了一个很好的问题。这是我的理解,其中可能包含错误或不完整,是纠正我自己思想的机会。

ESP32基于哈佛架构,这意味着有两条总线...一条用于指令,一条用于数据。松散地,从数据总线获取0x4000 0000以南的地址空间,而从0x4000 0000到0x4FFF FFFF的地址空间(如果我没记错的话)来自指令总线。

现在想象一下一个64K页面的RAM。与其他环境中的那一页RAM“仅存在”在固定地址空间位置的环境不同,在ESP32上,我们具有MMU(内存映射单元),可以使64K页的真实RAM映射到不同的地址位置。这意味着我们可以拥有可以从数据总线读取的RAM或可以从指令总线读取的RAM。

这就引出了一个问题,您将把什么放入可从指令总线读取的RAM?答案是(如果我理解正确的话)...指令(可执行代码)。

当我们编译C源文件时,我们最终得到一个目标文件,然后将其链接以生成可执行文件。在编译期间,已编译的C的不同“部分”将放置在目标文件的不同“部分”中。例如,代码进入“ .text”部分,而初始化数据进入“ .data”部分。通过用“ IRAM_ATTR”标记一段代码,我们声明编译后的代码将放置在一个名为“ .dram.text”的部分中(我正在做这个,因为我没有手工引用)。这意味着,除了具有“ .text”和“ .data”部分的可执行文件之外,还有其他部分。ESP32引导加载程序在启动时将复制那些“ .dram.text” 在启动对应用程序的控制之前,在启动时将它们放入真正的RAM中。然后将RAM映射到指令区地址空间(> 0x4000 0000)。这意味着可以将控件从正常运行的应用程序中传递给此代码(通常),并且它将“起作用”,因为该代码位于指令总线地址空间中。

现在剩下的就是“为什么”要这样做?答案是考虑替代方案。如果您要运行的代码不在RAM中,那么它还能在哪里?答案是“闪存”……如果它在闪存中,则当接收到执行该代码的请求时,必须从那里执行该代码。ESP32上的Flash比RAM访问慢得多...因此有一个内存缓存可用于解决其中的某些问题...但是我们无法确定当我们跳转到一段代码时它会存在于缓存中,因此可能需要从闪存缓慢加载。

现在我们开始讨论……如果我们要运行的代码是中断服务程序(ISR),我们总是希望尽快进入和退出它。如果我们必须在ISR中“等待”闪存中的负载,那么事情将会变得非常错误。通过将某个功能标记为存在于RAM中,我们就可以有效地牺牲宝贵的RAM,因为它知道对它的访问将是最佳的并且是恒定的。

分析的已经很明白了,还有一小点。我们分析完这个函数就到此为止。

这段也简单,我就写个注释。不分析了

这个是i2c的初始化是没有初始化的~

这个判断的有点奇怪。这个写法emmmmm

初始化

自己看吧

作用域符号::的前面一般是类名称,后面一般是该类的成员名称

Initialize the Matrix and show a TT Logo,初始化矩阵和显示一个TT Logo

开始显示图案

调用的是I2C总线

Tello talent无人机扩展模块库分析(default.ino)相关推荐

  1. 大疆睿炽Tello EDU无人机python操控之一——使用socket调试工具控制Tello EDU无人机

    使用socket调试工具控制Tello EDU无人机 最近工作一直在搞大疆之前推出的一款用于编程教育的无人机–Tello EDU,就是下图的这个小东西: 我们可能都知道在Tello EDU推出之前还有 ...

  2. stm32 HAL库分析之CAN

    stm32 HAL库分析之CAN 阻塞发送 HAL_StatusTypeDef HAL_CAN_Transmit(CAN_HandleTypeDef* hcan, uint32_t Timeout) ...

  3. python 颜色_如何使用python中matplotlib库分析图像颜色

    用代码分析图像可能很困难.你如何使代码"理解"图像的上下文? 通常,使用AI分析图像的第一步 是找到主要颜色.在如何使用python中matplotlib库分析图像颜色中,我们将使 ...

  4. Seurat的单细胞免疫组库分析来了!

    使用Seurat进行单细胞VDJ免疫分析 NGS系列文章包括NGS基础.转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这).ChIP-seq分析 (ChIP-seq基本分析流程) ...

  5. python数据挖掘课程】十七.社交网络Networkx库分析人物关系(初识篇)

    #2018-03-30 09:21:39 March Friday the 13 week, the 089 day SZ SSMR python数据挖掘课程]十七.社交网络Networkx库分析人物 ...

  6. 【EtherCAT从站(SPI)扩展模块电路分析】

    1 EtherCAT从站(SPI)扩展模块电路分析 EtherCAT从站通讯模块,顾名思义也是用于扩展系统的EtherCAT接口,本模块采用LAN9252模块,与CPU采用SPI总线接口.接口电路为: ...

  7. Kotlin协程核心库分析-5 Job异常处理器注意点

    本章我们简单探讨一下异常处理: 我们知道协程传入CoroutineExceptionHandler对象即可捕获异常,那么对于子协程是否适用呢? fun main() {val eChild = Cor ...

  8. 大疆睿炽Tello EDU无人机python操控之二——使用Tello-Python-master示例程序控制Tello EDU无人机

    使用Tello-Python-master示例程序控制Tello EDU 上篇文章我们应该可以掌握使用socket调试工具操控Tello EDU无人机,那么本篇文章我们将使用"正宗" ...

  9. 【机器学习】使用CatBoost库分析股票行情(指标为RSI、Boll、MACD和MA)并输出因子占比分析

    文章目录 前言 一.CatBoost是什么? 二.准备工作 2.1 MyTT 2.2 获取日K数据 2.3 安装CatBoost 三. 使用CatBoost库分析股票行情(完整源码) 总结 前言 随着 ...

最新文章

  1. mnist数据集保存为图片
  2. ionic3学习之Android平台打包方式
  3. 云计算服务定义及优劣势—Vecloud微云
  4. Windows 自动登陆的简单方法
  5. linux sql server硬件要求,SQL Server On Linux(20)—— SQL Server On Linux性能(6)——针对性能的配置(Linux层面)...
  6. 【转载】android程序报找不到Application
  7. 基于python的知识融合_知识融合
  8. mysql insert s锁_MySQL 死锁套路:唯一索引 S 锁与 X 锁的爱恨情仇
  9. spring-session实现分布式集群session的共享(转)
  10. linux多线程调度设置
  11. matlab covar,Matlab功率谱估计
  12. 两行Python代码实现视频负片特效
  13. linux bmp图片怎么转换成ppm,ppm图像格式与bmp之间的相互转换
  14. 【python初学者日记】selenium初体验——“秒杀商品”、“清空购物车”技能养成记(一)
  15. Win中安装虚拟机+CentOS
  16. 【SQL学习笔记】之数据定义语言(DDL)
  17. lambada表达式理解
  18. new DecimalFormat(0.##)与new DecimalFormat(0.00)的区别
  19. 仪表特效——AE在UI动效设计中的应用
  20. SSL-ZYC P2624 (洛谷P3355)【24题】骑士共存问题

热门文章

  1. delphi中的public和published
  2. Kylin常见错误及解决方法
  3. 实战|QUIC协议在蚂蚁集团落地
  4. Tech Talk · 云技术有话聊 | 关键基础部件如何保障高可靠?
  5. The long goodbye 漫长的告别 | 经济学人中英双语对照精读笔记
  6. 重装系统服务器不识别u盘,重装系统时BIOS不识别U盘启动盘如何解决?
  7. 浅谈大数据及相关技术在计算机专业的应用
  8. pyspider创建淘女郎图片爬虫任务-运行流程解析
  9. 北京卫星地图 百度卫星地图高清版(含道路地名标签叠加)
  10. login 登陆界面