stack corruption:栈摧毁错误此类错误一般是数组越界造成的。 segmentation fault:段错误 一般有以下原因容易造成段错误: 1)指针: 指针为空"NULL",或者指针未初始化就使用,指针使用完后未释放 2)内存(超出分配的内存空间):
转载
2024-07-17 13:09:15
254阅读
[经验] STM32堆栈溢出会出现的问题及溢出原因分析和解决方法 裸奔的时候,一直担心栈会不会溢出。由于栈的使用量无法估测,导致栈的设置要么过大,要么过小。今天,我想了一种简单的检测方法,可以简单检测栈是否溢出,下面是我的具体的思想。1、查看*.map文件,查找栈顶地址;2、定义一个全局变量,用于存储栈顶上电时候的数据;3、在系统参数初始化的时候将栈顶数据赋给第二步定义的全局变量;4、在系统大循环
用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势。Keil公司的C51编译器支持经典8051和8051派生产品的版本,通称为Cx51。应该说,Cx51是C语言在MCS51单片机上的扩展,既有C语言的共性,又有它自己的特点。本文介绍的是Cx51程序设计时堆栈的计算方法。 1.堆栈的溢出问题。MCS51系列单片机将堆栈设置在片内RAM中,由于片内RAM资源有限,堆栈区的范围也是
转载
2024-04-29 11:30:42
39阅读
这两天在调试即将完成的Hands Free Profile的AG部分代码,在调试与HF Client设备收发AT指令部分时遇到了AT+CNUM指令HF Client端 “解析AT指令错误”的提示。由于HFP中,AT指令参数都是存放在字符串中进行收发的,字符串的解析就至关重要,而在解掉bug的同时,我也在不断地学习。本文便介绍一个在HF Client端利用sscanf()
转载
2024-05-15 12:43:19
100阅读
在ESP32上充分利用双核的FreeRTOS多核编程介绍ESP32是一款功能强大的Wi-Fi和蓝牙双模芯片,内置两个处理核心(核心0和核心1)。FreeRTOS作为ESP32的操作系统,提供了多任务支持,可以使得这两个核心同时工作,双核,包含核心0(CPU0)和核心1(CPU1),在不使用freeRTOS情况下程序是跑在核心1上,而核心0主要运行WIFI和bluetooth,如果我们的项目不频繁使
转载
2024-07-17 13:16:12
237阅读
说明:我参考正点原子战舰开发板的例程和实验进行深入思考学习,读者若觉得有哪里描述不全的可以去这里下载资料查阅:stm32f103战舰开发板概念这里所说的堆栈,是针对单片机所说的“堆”(HEAP)与“栈”(STACK),它们是在内存中开辟的一片拥有特殊用途的区域;这里所说的内存,是指STM32片内的RAM,对于大容量的STM32F10xxx来说RAM的大小为64KB。内存布局时,MDK-ARM编译器
在 ESP-IDF 环境下,使用标准 C 扩展 Micropython 模块一、 安装 ESP-IDF 环境在其他课程中讲过,这里不再赘述,有机会再出教程吧,但需要注意的是,截止到 2024年1月初,最稳定的 micropython 开发环境是 ESP-IDF_4.4.6,最新的 5.x 对 ESP32-S3 不是很友好,反正我是没有搞成功过,在 git 上提问也没有能得到满意的回答,建议大家还是
转载
2024-07-09 16:35:21
880阅读
Arduino ESP32 flash数据存储结构?分区表官方文档:《分区表》✨想了解ESP32 flash数据存储结构需要从分区表开始了解。一点类似一台电脑上挂载的硬盘一样。分区表保存 SPI flash 各区信息,包括引导程序、各种应用程序二进制文件、数据及文件系统等/*在Arduino环境中使用的flash布局
|----|-------|--------|-------|------
转载
2024-03-18 10:53:43
159阅读
目录整体框图(草稿版)整体流程图(草稿版)esp32-WIFI状态机esp_wifi.h depict WiFi programming modeltcp-clientGPIO ESP-IDF 编程指南 整体框图(草稿版)整体流程图(草稿版)esp32-WIFI状态机WiFi-startWiFi-event-machine用户自定义状态机回调函数回调函数作为形参的方式传递给esp_event_l
转载
2024-05-07 22:35:33
126阅读
ESP32开发之路(3)— 点亮第一个LED灯及按键输入本次开发是在Ubuntu下的,使用的模块是GOOUUU-ESP32,使用VSCode编辑项目。基于工程:ESP32开发之路(2)— HelloWorld工程分析和优化一、点亮第一个LED灯复制hello_world文件并命名为led_key,修改hello_world_main.c为app_main.c; 然后将工作区保存在led_key文件
转载
2024-03-19 09:27:29
247阅读
提示:好记性不如烂笔头。本博客作为学习笔记,有错误的地方希望指正 文章目录前言:一、任务延时vTaskDelay()二、任务延时vTaskDelayUntil()三、任务延时xTaskDelayUntil()四、获取任务优先级uxTaskPriorityGet()五、任务优先级设置vTaskPrioritySet()六、任务挂起vTaskSuspend()七、任务恢复vTaskResume()八、
转载
2024-03-18 23:34:45
269阅读
这个实验的功能是使用乐鑫提供的 nvs 库去对 spi flash 的读写。 这个实验的代码为工程“3_9_nvs”目录。3.9.1. 实验内容(1) 学习 NVS 库函数接口 (2) 学习 NVS 存储/读取多种类型数据3.9.2. ESP32 NVS 功能介绍NVS总的来说,就是非易失性存储,类似MCU EEPROM,但实际上调用ESP32这些函数,数据是存储在FLASH中的。它的管理方式类似
转载
2024-02-23 21:09:13
443阅读
flash和SRAM的区别 flash可以像硬盘一样存数据,也可以直接像RAM运行,一般在里面放bootload,程序执行代码。1、stm32中的堆栈 单片机是一种集成电路芯片,集成cpu、ram、rom、多种i/o口和中断系统、定时器/计数器等功能。cpu中包括了各种总线电路,计算电路,逻辑电路,还有各种寄存器。stm32有通用寄存器R0-R15以及一些特殊功能寄存器,其中包括了堆栈指针寄存器。
1.DAC基础大多数STM32芯片会自带DAC输出模块(12 位数字输入,电压输出型的 DAC)例如常用的STM32F103RCT6 ( RAM48K FLASH 256K),芯片的DAC有两个输出通道本次实验使用单 DAC 通道 1,采用 12 位右对齐格式输出。 STM32F103 参考手册P185:DAC过程,简要概括为:给DAC_DORx寄存器赋值,然后DAC模块处理
转载
2024-09-15 13:56:08
154阅读
移植准备源码准备rtthread官网源码下载软件准备STM32CubeMX Keil5 Xshell Scons Python开始移植把源码解压到一个没有中文路径的文件夹,我就解压到D:\software\workspace\rt-thread进入bsp\stm32这些bsp都是一些厂商自己的开发板,rtthread官方给这些板子写好了bsp。我用的板子是普中科技STM32F103ZET6的板子,
1,启用 外部RAM勾选 Support for external, SPI-connected RAM 如下图2,配置说明1,选择 外部RAM 的类型(见下图) 这个要根据自己的板子选择, ESP32支持的外部RAM有限. 不清楚的 选择 自动检测2, 设置 外部RAM 的时钟速度(见下图) 勾选40M即可官方解释:选择SPI RAM芯片的速度。如果SPI RAM被启用,我们只支持现在支持的三种
转载
2024-02-21 10:47:34
2963阅读
一、简介app_main函数中开始我们的代码开发。但是为什么是app_main呢?app_main又是从哪里被调用的?app_main之前又做了什么操作呢?今天我们就来详细分析一下。 二、app_main从app_main开始,就像下图这样的。 开发者自己添加的代码,也都是从app_main函数这里开始。
转载
2023-11-20 23:48:52
184阅读
访问以下链接可下载有关 ESP32 的文档资料https://www.espressif.com/sites/default/files/documentation/esp32_datasheet_cn.pdfESP32ESP23的硬件资源ESP32 是集成 2.4 GHz Wi-Fi 和蓝牙双模的单芯片方案,采用台积电(TSMC)超低功耗的 40 纳米工艺,拥有最佳的功耗性能、射频性能、稳定性、
转载
2024-03-24 15:19:23
478阅读
1,首先来看:栈(STACK)的问题.函数的局部变量,都是存放在"栈"里面,栈的英文是:STACK.STACK的大小,我们可以在stm32的启动文件里面设置,以战舰stm32开发板为例,在startup_stm32f10x_hd.s里面,开头就有:Stack_Size EQU 0x00000
调用函数pxPortInitialiseStack()初始化任务堆栈,并将最新的栈顶指针赋值给任务TCB的pxTopOfStack字段。 调用函数pxPortInitialiseStack()后,相当于执行了一次系统节拍时钟中断:将一些重要寄存器入栈。虽然任务还没开始执行,也并没有中断发
转载
2024-07-06 21:20:32
248阅读