当前位置: 首页 > wzjs >正文

WordPress下拉下一页企业营销型网站seo推广

WordPress下拉下一页,企业营销型网站seo推广,创意作品,安阳做网站推广最好的公司飞书文档https://x509p6c8to.feishu.cn/wiki/F9PdwnOKhiTRDWk4cr1cIZsvneh 无论是前面我们说到的NVS,还是后面用到的文件系统,他们都必须有存储的载体,例如NVS,我们说过它是存储在Flash中的,那具体是Flash的哪个位置呢…

飞书文档https://x509p6c8to.feishu.cn/wiki/F9PdwnOKhiTRDWk4cr1cIZsvneh

无论是前面我们说到的NVS,还是后面用到的文件系统,他们都必须有存储的载体,例如NVS,我们说过它是存储在Flash中的,那具体是Flash的哪个位置呢?这就是由分区表决定的了。

1-1、什么是分区表?

ESP32-S3的分区表是用来确定在ESP32-S3的Flash中数据和应用程序的布局。每个ESP32-S3的Flash可以包含多个应用程序(例如双分区OTA中,就有两个应用),以及多种不同类型的数据(例如校准数据、文件系统数据、参数存储数据等)。因此,我们在Flash的默认偏移地址0x8000处烧写一张分区表。

2-1IDF中默认的分区表?

IDF中有一些参考的分区表设置,我们可以打开idf.py menuconfig查看

(Top) → Partition Table → Partition TableEspressif IoT Development Framework Configuration
(X) Single factory app, no OTA
( ) Single factory app (large), no OTA
( ) Factory app, two OTA definitions
( ) Two large size OTA partitions
( ) Custom partition table CSV

这些分区表文件放在esp-idf/components/partition_table文件夹中,我们可以打开partitions_singleapp.csv查看

# Name,   Type, SubType, Offset,  Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs,      data, nvs,     ,        0x6000,
phy_init, data, phy,     ,        0x1000,
factory,  app,  factory, ,        1M,上方创建了三个分区,nvs,phy_init和factory分区
其中nvs和phy_init为数据区,大小分别为0x6000和0x1000,分别用于存储NVS库专用分区和PHY初始化数据。
factory为应用区,大小为1M,系统启动时,会默认加载这个分区内的应用。

分区名称

类型

子类型

偏移量

大小

描述

nvs 

data

nvs

留空,自动偏移

 0x6000

非易失性存储区,用于保存设备重启后仍需保留的配置数据,如Wi-Fi凭据等

phy_init

data

 phy

留空,自动偏移

0x1000

物理层初始化数据区,通常存放与硬件初始化相关的固件或配置信息

factory

app  

factory

留空,自动偏移

1M

出厂固件或用户可升级的应用程序固件存储区,用于存储设备的主要应用程序代码

在这里可以看到,只用了1M多的空间,而我们板卡Flash一般是16M的,所以,我们可以根据实际应用需求修改大小,如果我们需要修改不同分区的大小,应该如何修改呢?那就需要我们自定义分区表了。

3-1、如何自定义分区表?

我们可以参考上述分区表的格式,在工程文件下创建partitions.csv文件,然后添加user_nvs

# Name,   Type, SubType, Offset,  Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs,      data, nvs,     ,        0x6000,
phy_init, data, phy,     ,        0x1000,
factory,  app,  factory, ,        1M,
user_nvs, data, nvs,     ,        0x6000,

然后通过idf.py menuconfig配置自定义分区表

然后重新编译

idf.py build编译完成后,可以执行以下指令查看分区表
idf.py partition-table
*******************************************************************************
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,24K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,1M,
user_nvs,data,nvs,0x110000,24K,
*******************************************************************************

接着,我们就可以修改原来nvs的代码,让它使用我们创建的分区进行存储

#include <stdio.h>
#include <inttypes.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "nvs_flash.h"
#include "nvs.h"
#include "esp_log.h"static const char *TAG = "NVS"; // 定义日志标签void app_main(void)
{char* partition_name="user_nvs";            //我们添加的分区名// 初始化 NVSesp_err_t err = nvs_flash_init_partition(partition_name);if (err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND) {// NVS 分区被截断,需要擦除// 重新初始化 nvs_flashESP_ERROR_CHECK(nvs_flash_erase_partition(partition_name));err = nvs_flash_init_partition(partition_name);}ESP_ERROR_CHECK(err);// 打开命名空间ESP_LOGI(TAG, "打开非易失性存储 (NVS) 句柄...");nvs_handle_t my_handle;err = nvs_open_from_partition(partition_name,"storage", NVS_READWRITE, &my_handle);if (err != ESP_OK) {ESP_LOGI(TAG, "打开 NVS 句柄时出错 (%s)!\n", esp_err_to_name(err));} else {// 读取重启计数器ESP_LOGI(TAG, "从 NVS 读取重启计数器 ... ");int32_t restart_counter = 0; // 如果 NVS 中未设置值,则默认为 0err = nvs_get_i32(my_handle, "restart_counter", &restart_counter);ESP_LOGI(TAG, "重启计数器 = %" PRIu32 "\n", restart_counter);// 更新重启计数器ESP_LOGI(TAG, "更新 NVS 中的重启计数器 ... ");restart_counter++;err = nvs_set_i32(my_handle, "restart_counter", restart_counter);// 提交写入的值。设置任何值后,必须调用 nvs_commit() 以确保更改写入闪存存储。ESP_LOGI(TAG, "提交 NVS 中的更改 ... ");err = nvs_commit(my_handle);// 关闭命名空间nvs_close(my_handle);}ESP_LOGI(TAG, "\n");// 重启模块for (int i = 10; i >= 0; i--) {ESP_LOGI(TAG, "将在 %d 秒后重启...\n", i);vTaskDelay(1000 / portTICK_PERIOD_MS);}ESP_LOGI(TAG, "现在重启。\n");fflush(stdout);esp_restart();
}

编译烧录后,我们会发现,效果和原来的是一样的,只不过现在存储到,user_nvs分区中。

4-1、自定义自己的分区

另外,我们还可以自定义分区:

我们可以参考上述分区表的格式,添加user分区

# Name,   Type, SubType, Offset,  Size, Flags
# Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap
nvs,      data, nvs,     ,        0x6000,
phy_init, data, phy,     ,        0x1000,
factory,  app,  factory, ,        1M,
user,     0x40, 0x01,    ,        0x1000,

Name 字段

Name 字段可以是任何有意义的名称,但不能超过 16 个字节,其中包括一个空字节(之后的内容将被截断)。该字段对 ESP32-S3 并不是特别重要。

Type 字段

Type 字段可以指定为 app (0x00) 或者 data (0x01),也可以直接使用数字 0-254(或者十六进制 0x00-0xFE)。注意,0x00-0x3F 不得使用(预留给 esp-idf 的核心功能)。

SubType 字段

SubType 字段长度为 8 bit,内容与具体分区 Type 有关。目前,esp-idf 仅仅规定了 “app” 和 “data” 两种分区类型的子类型含义。

​
当 Type 定义为 app 时,SubType 字段可以指定为 factory (0x00)、 ota_0 (0x10) … ota_15 (0x1F) 或者 test (0x20)。当 Type 定义为 data 时,SubType 字段可以指定为 ota (0x00)、phy (0x01)、nvs (0x02)、nvs_keys (0x04) 或者其他组件特定的子类型.ESP-IDF 还支持其他用于数据存储的预定义子类型,包括:
coredump (0x03) 用于在使用自定义分区表 CSV 文件时存储核心转储。
efuse (0x05) 使用 虚拟 eFuse 模拟 eFuse 位。
undefined (0x06) 隐式用于未指定子类型(即子类型为空)的数据分区,但也可显式将其标记为未定义。
fat (0x81) 用于 FAT 文件系统。
spiffs (0x82) 用于 SPIFFS 文件系统。
littlefs (0x83) 用于 LittleFS 文件系统,详情可参阅 storage/littlefs 示例。如果分区类型是由应用程序定义的任意值 (0x40-0xFE),那么 subtype 字段可以是由应用程序选择的任何值 (0x00-0xFE)。​

然后通过idf.py menuconfig配置自定义分区表

(Top) → Partition Table
Espressif IoT Development Framework ConfigurationPartition Table (Custom partition table CSV)  --->
(partitions.csv) Custom partition CSV file   //名称需要和我们文件名称一致
(0x8000) Offset of partition table
[*] Generate an MD5 checksum for the partition table

然后重新编译

idf.py build编译完成后,可以执行以下指令查看分区表
idf.py partition-table
*******************************************************************************
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs,data,nvs,0x9000,24K,
phy_init,data,phy,0xf000,4K,
factory,app,factory,0x10000,1M,
user,64,1,0x110000,4K,
*******************************************************************************

接着我们可以编写个demo验证下,能否读写分区表

#include <stdio.h>
#include <esp_log.h>
#include <esp_partition.h>
#include "string.h"static const char*TAG = "partition";/*定义分区类型*/
#define USER_PARTITION_TYPE 0x40
/*定义分许子类型*/
#define USER_PARTITION_SUBTYPE 0x01
/*定义目标分区指针*/
static const esp_partition_t* partition_ptr = NULL;void app_main(void)
{/*获取目标分区指针*/partition_ptr = esp_partition_find_first(USER_PARTITION_TYPE, USER_PARTITION_SUBTYPE, NULL);if(partition_ptr == NULL){ESP_LOGE(TAG,"CAN'T FIND partition");return;}/*1-擦除操作*/esp_partition_erase_range(partition_ptr,0,0x1000);/*2-准备目标字符串*/const char *test_str = "this is flash write test!";/*3-写入目标地址*/esp_partition_write(partition_ptr,0,test_str,strlen(test_str));/*4-读出目标地址*/char read_buf[64];memset(read_buf,0,sizeof(read_buf));esp_partition_read(partition_ptr,0,read_buf,strlen(test_str));ESP_LOGI(TAG, "read partition data:%s" ,read_buf);return;
}

更多参考

https://docs.espressif.com/projects/esp-idf/zh_CN/v5.4/esp32s3/api-guides/partition-tables.html


文章转载自:

http://trdV2zm2.wnrcj.cn
http://PgtAJBit.wnrcj.cn
http://Mdk5RGXY.wnrcj.cn
http://HrA0U7zs.wnrcj.cn
http://zNqnUz1I.wnrcj.cn
http://hkx94rVO.wnrcj.cn
http://3t6ZnyXR.wnrcj.cn
http://oyU75MeH.wnrcj.cn
http://dQKI0r7s.wnrcj.cn
http://Cc21K4Er.wnrcj.cn
http://ZDgakrf7.wnrcj.cn
http://3Gajckdi.wnrcj.cn
http://Pqn70HSU.wnrcj.cn
http://rDSreqBy.wnrcj.cn
http://scKVzKov.wnrcj.cn
http://xGTFcLxj.wnrcj.cn
http://G50rdU7h.wnrcj.cn
http://jqTrKtmg.wnrcj.cn
http://iKapEqDc.wnrcj.cn
http://ktTN1zRX.wnrcj.cn
http://oQ02Cij2.wnrcj.cn
http://FeZDbovs.wnrcj.cn
http://BDRBinJC.wnrcj.cn
http://GxwJhrLA.wnrcj.cn
http://CWW9ZMrc.wnrcj.cn
http://suo0ZppU.wnrcj.cn
http://MJ84hVM3.wnrcj.cn
http://pBQbJYBW.wnrcj.cn
http://hhy5whbX.wnrcj.cn
http://Vuvl3YLy.wnrcj.cn
http://www.dtcms.com/wzjs/637493.html

相关文章:

  • 开公司先建设网站外国网站欣赏
  • linux 搭建网站服务器ai海报设计
  • 湖北网站建设制作网站备案成功后该怎么做
  • 网站字体大小选择wordpress博客重装
  • 开发网站的流程广州联享品牌网站建设
  • 宽城区网站建设wordpress文章标题字体
  • 怎样建网站视频教程手把手教建设网站
  • 家居网站建设定位分析论文wordpress永久链接设置的六大技巧
  • 建网站需要多少钱2017wordpress登陆界面背景
  • 地下城钓鱼网站怎么做织梦做旅游网站
  • 德邦物流公司现代物流网站建设与开发标书制作代做公司
  • 网站开发计什么科目wordpress客户使用的后端
  • 做网站时链接的网页无法显示搭建网站需要学什么软件
  • 网站被做301跳转了怎么办新版wordpress没有关键词
  • 一个人制作网站智慧团建网站登录平台pc端
  • 银川网站建设0951手机app下载网
  • 备案个人网站名称wap网站软件
  • 建立自己的网站步骤网站 平均加载时间
  • 设计logo网站免费国外如何在各大网站发布信息
  • 三五互联网站建设怎么样莱芜吧莱芜贴吧
  • 工商局网站做年报制作网站首先做的是
  • 网站推广软件工具设计房子装修效果图软件
  • 海口建设局网站h5网站建设代理
  • 农业网站源码带数据空间购买网站
  • 优秀网站建设模版交互设计专业学什么
  • 广州做网站开发网站过度优化
  • 企业网站建立之前必须首先确定河南建设工程信息网官网洛阳至信阳省道
  • 公司网站可以做服务器吗群晖自行安装wordpress
  • 宁波网站建设制作价格网站换模板要怎么做
  • 吴江市中云建设监理有限公司网站长沙中小企业网站建设