472_Arduino setup之前的工作分析

         全部学习汇总: https://github.com/GreyZhang/arduino_uno

         在Arduino的一个程序的框架中,初始化的部分在setup函数中实现,而之后软件进入到一个叫做loop的无限循环。这个是大概的一个套路性的处理。

         那么,在嵌入式的软件中,最初的软件执行一般是startup,然而用户真正需要了解的软件的初始其实还真就是main函数。C语言中如此,嵌入式的C++也是差不多的。如此,可以根据这个线索找到setup之前是否还有什么处理。

         这就是main函数的实现,之前已经对两个接口是否是通过这个链接到了外部的文件做了测试。这样,在setup之前的究竟有什么执行操作就容易定位了。

         首先,直接采用了编译的处理弄清楚了,39~41行其实是没有作用的。而initVariant的定义其实就在文件的上面,是一个空函数。这样,setup之前的操作就只有一个init函数的执行了。

         首先,一个明确的动作是关中断。接下来,一系列的代码其实是为了兼容很多不同的MCU,但是,这些代码的处理全都是设置了timer0定时器。从注释信息看,Arduino提供的延时的操作接口或许就是使用了这个定时器。

         这里能够继续获得到的信息是,这个定时器其实是使用了中断的。

         这里设置了几个其他的定时器,主要还是用于PWM的实现。我估计,在注入PWM等具体的功能模块中,这些寄存器的使用应该还会有其他的修改。

         最后,把用于BootLoader的串口给禁用掉。这个也很容易理解,APP其实是从BootLoader跳转过来的,而在BootLoader中使用到了串口功能。不过,合理的处理方式不应该是在BootLoader中直接实现串口的反初始化吗?这个,确实是处理的让我稍微费解了一点。

### Arduino 中 `esp_system` 的功能与使用方法 #### 1. 深度睡眠模式 (Deep Sleep Mode) ESP32 支持低功耗模式,其中深度睡眠是最常用的节能方式之一。当进入深度睡眠时,除了 RTC 相关模块外,其他所有硬件模块都会被关闭以节省电能。因此,在启用深度睡眠之前,需要手动停止某些服务,例如 Wi-Fi 和蓝牙。 - 停止 Wi-Fi 和蓝牙的服务可以通过调用以下函数实现: ```cpp esp_wifi_stop(); // 停止Wi-Fi esp_bluedroid_disable(); // 禁用Bluedroid协议栈 esp_bt_controller_disable(); // 关闭蓝牙控制器 ``` - 当设备从深度睡眠中唤醒后,程序会重新执行从 `void setup()` 开始的部分[^1]。 #### 2. 实时时钟存储器 (RTC Memory) RTC 存储器是一种特殊的内存区域,即使在深度睡眠期间也能保持数据不丢失。这使得它非常适合用于保存状态或其他重要信息以便在唤醒之后恢复使用。 #### 3. TCP/IP 配置 通过配置 TCP/IP 参数可以自定义网络接口的行为。例如设置接入点(AP) IP 地址信息: ```cpp tcpip_adapter_ip_info_t ipInfo; IP4_ADDR(&ipInfo.ip, 192, 168, 4, 1); IP4_ADDR(&ipInfo.gw, 192, 168, 4, 1); IP4_ADDR(&ipInfo.netmask, 255, 255, 255, 0); tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_AP, &ipInfo); ``` 上述代码片段展示了如何设定 AP 接口的静态 IP 地址[^2]。 #### 4. 错误调试工具 对于复杂项目中的错误排查,可能需要用到更深入的技术手段来定位问题根源。如果遇到难以解决的应用崩溃或者异常终止情况,则可借助 GDB 调试工具加载目标文件进行分析: ```bash Reading symbols from /path/to/your/application.elf...done. ``` 这里提到的是一个具体实例路径下的 ELF 文件读取完成的消息显示[^3]。 另外需要注意的是 FreeRTOS 的调度器初始化可能会引起特定条件下未预期的结果。比如在一个案例里发现是因为 main 函数内部过早地调用了 vTaskStartScheduler() 所致[^4]。 综上所述,掌握这些基础概念和技术细节有助于更好地利用 ESP32 平台上的资源并构建稳定可靠的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值