热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

科技有限公司|文件名称_<3>esp8266iot软件延时

篇首语:本文由编程笔记#小编为大家整理,主要介绍了<3>esp8266iot软件延时相关的知识,希望对你有一定的参考价值。目录

篇首语:本文由编程笔记#小编为大家整理,主要介绍了<3> esp8266 iot 软件延时相关的知识,希望对你有一定的参考价值。


目录

一、延时函数os_delay_us

二、新建项目

三、新建文件

1.bsp_delay.c

2.bsp_delay.h

四、ICACHE_FLASH_ATTR,system_soft_wdt_feed()解析

五、user_main.c

六、程序运行结果




一、延时函数os_delay_us


二、新建项目

复制&#xff08;https://blog.csdn.net/qq_27558597/article/details/117656516?spm&#61;1001.2014.3001.5502&#xff09;章节的SDK模板&#xff0c;项目名为<002_Delay>&#xff0c;导入IDE&#xff0c;如下&#xff1a;

打开driver文件夹&#xff0c;删除暂时用不到的.c文件&#xff0c;以及include下的driver的对应的.h文件&#xff0c;过程如下&#xff1a;

注意不要把Makefile删除了。


三、新建文件

1.bsp_delay.c

修改bsp_delay.c内容如下&#xff1a;

/*
*********************************************************************************************************
*
* 程序名称: 系统延时模块
* 文件名称: bsp_delay.c
* 版 本: v1.0.0
* 编 写: 风巽云科技 lijiangmo
* 说 明: 使用os_delay_us重新封装
*
* 版本记录:
* v1.0.0: 2021年6月9日&#xff0c;初版
*
* Copyright (C), 2021-2031, 深圳市风巽云科技有限公司 https://fxymcu.taobao.com
*
*********************************************************************************************************
*/
#include "osapi.h"
#include "user_interface.h"
/*
*********************************************************************************************************
* 函 数 bsp_DelayUsUs
* 功能说明: us延时
* 形 参: ulNus: 延时值&#xff0c;注意最大延时值为 2^24 / fUsValueCount)
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR bsp_DelayUs(uint32_t ulNus)
os_delay_us(ulNus);
/*
*********************************************************************************************************
* 函 数 bsp_DelayMsMs
* 功能说明: ms延时
* 形 参: ulNms: 毫秒延时值
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR bsp_DelayMs(uint32_t ulNms)
uint32_t ulStatus;
while (ulNms)

/* 延时1000us */
os_delay_us(1000);
/* 清零看门狗计数器 */
system_soft_wdt_feed();
ulNms--;

/********************************************* End of file **********************************************/

2.bsp_delay.h

修改bsp_delay.h内容如下&#xff1a;

/*
*********************************************************************************************************
*
* 程序名称: 系统延时模块
* 文件名称: bsp_delay.h
* 版 本: v1.0.0
* 编 写: 风巽云科技 lijiangmo
* 日 期: 2021年6月9日
*
* Copyright (C), 2021-2031, 深圳市风巽云科技有限公司 https://fxymcu.taobao.com
*
*********************************************************************************************************
*/
#ifndef __BSP_DELAY_H
#define __BSP_DELAY_H
/* 供外部调用函数 */
void ICACHE_FLASH_ATTR bsp_DelayUs(uint32_t ulNus);
void ICACHE_FLASH_ATTR bsp_DelayMs(uint32_t ulNms);
#endif
/********************************************* End of file **********************************************/

四、ICACHE_FLASH_ATTR&#xff0c;system_soft_wdt_feed()解析


五、user_main.c

/*
* ESPRESSIF MIT License
*
* Copyright (c) 2016
*
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
* it is free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
* to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
/*
*********************************************************************************************************
*
* 程序名称: 软件延时
* 文件名称: user_main.c
* MCU型号 : ESP8266 FLASH:4MB RAM: 160KB&#xff08;64KB为iRAM&#xff0c;96KB为dRAM&#xff09;
* 运行平台: ESP8266 IoT开发板
* 版 本: v1.0.0
* 编 写: 风巽云科技 lijiangmo
* 说 明: 软件延时
*
* 版本记录:
* v1.0.0: 2021年6月9日&#xff0c;初版
*
* Copyright (C), 2021-2031, 深圳市风巽云科技有限公司 https://fxymcu.taobao.com
*
*********************************************************************************************************
*/
#include "ets_sys.h"
#include "osapi.h"
#include "mem.h"
#include "user_interface.h"
#include "sntp.h"
#include "smartconfig.h"
#include "espconn.h"
#include "driver/uart.h"
#include "driver/bsp_delay.h"
/* FLASH分区表 */
#if ((SPI_FLASH_SIZE_MAP &#61;&#61; 0) || (SPI_FLASH_SIZE_MAP &#61;&#61; 1))
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP &#61;&#61; 2)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0xfb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0xfc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0xfd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP &#61;&#61; 3)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP &#61;&#61; 4)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP &#61;&#61; 5)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#elif (SPI_FLASH_SIZE_MAP &#61;&#61; 6)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#else
#error "The flash map is not supported"
#endif
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM SYSTEM_PARTITION_CUSTOMER_BEGIN
static const partition_item_t at_partition_table[] &#61;
SYSTEM_PARTITION_BOOTLOADER, 0x0, 0x1000,
SYSTEM_PARTITION_OTA_1, 0x1000, SYSTEM_PARTITION_OTA_SIZE,
SYSTEM_PARTITION_OTA_2, SYSTEM_PARTITION_OTA_2_ADDR, SYSTEM_PARTITION_OTA_SIZE,
SYSTEM_PARTITION_RF_CAL, SYSTEM_PARTITION_RF_CAL_ADDR, 0x1000,
SYSTEM_PARTITION_PHY_DATA, SYSTEM_PARTITION_PHY_DATA_ADDR, 0x1000,
SYSTEM_PARTITION_SYSTEM_PARAMETER, SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR, 0x3000,
SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM, SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR, 0x1000,
;
/*
*********************************************************************************************************
* 函 数 名: user_pre_init
* 功能说明: 注册分区表
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR user_pre_init(void)
os_printf("->SPI_FLASH_SIZE_MAP &#61; %d\\r\\n", SPI_FLASH_SIZE_MAP);
if (!system_partition_table_regist(at_partition_table, sizeof(at_partition_table) / sizeof(at_partition_table[0]), SPI_FLASH_SIZE_MAP))

os_printf("->system_partition_table_regist fail\\r\\n");
while (1)



os_printf("->system_partition_table_regist success\\r\\n");
/*
*********************************************************************************************************
* 函 数 名: PrintfSystempInfo
* 功能说明: 打印例程名称和例程发布日期
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static void ICACHE_FLASH_ATTR PrintfSystempInfo(void)
os_printf("\\r\\n\\r\\n");
os_printf("-------------------------------------------------------------\\r\\n");
os_printf("->ESP8266 IoT\\r\\n");
/* SDK版本 */
os_printf("->SDK: %s\\r\\n", system_get_sdk_version());
/* 编译时间 */
os_printf("->Build: %s %s\\r\\n", __DATE__, __TIME__);
/* 芯片ID */
os_printf("->CPU ID: 0x%X\\r\\n", system_get_chip_id());
/* CPU时钟 */
os_printf("->CPU Freq: %dMHz\\r\\n", system_get_cpu_freq());
/* FLASH ID */
os_printf("->FLASH ID: 0x%X\\r\\n", spi_flash_get_id());
/* 查询系统剩余可用heap区空间 */
os_printf("->Heap Size: %dByte %dKB\\r\\n", system_get_free_heap_size(), system_get_free_heap_size() / 1024);
/* 打印系统内存空间分配&#xff0c;打印信息包括 data/rodata/bss/heap */
system_print_meminfo();
os_printf("-------------------------------------------------------------\\r\\n\\r\\n");
/*
*********************************************************************************************************
* 函 数 名: user_init
* 功能说明: 用户应用初始化
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR user_init(void)
partition_item_t partition_item;
uint8_t ucTimeCnt &#61; 0;
if (!system_partition_get_item(SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM, &partition_item))

os_printf("Get partition information fail\\r\\n");

/* 硬件初始化 */
//system_update_cpu_freq(SYS_CPU_80MHZ); /* CPU频率80MHz-默认 */
//UART_SetPrintPort(0); /* 系统Debug信息从串口0输出-默认 */
//uart_init(BIT_RATE_74880, BIT_RATE_74880); /* 初始化波特率-默认 */
bsp_DelayUs(1000);
/* 串口打印系统信息 */
PrintfSystempInfo();
while(1)

ucTimeCnt&#43;&#43;;
os_printf("ucTimeCnt &#61; %d\\r\\n", ucTimeCnt);
bsp_DelayMs(200);

/********************************************* End of file **********************************************/

注&#xff1a;源文件修改后要点击保存&#xff0c;编译器编译时是以保存文件为准。

项目名上右键选择Properties配置工程&#xff0c;选择C/C&#43;&#43; Build->Build command中添加编译规则&#xff08;make COMPILE&#61;gcc BOOT&#61;none APP&#61;0 SPI_SPEED&#61;40 SPI_MODE&#61;DIO SPI_SIZE_MAP&#61;4&#xff09;&#xff0c;可以根据实际情况来更改规则&#xff0c;点击OK退出。

项目名上右键清除项目&#xff0c;编译项目&#xff0c;如下&#xff1a;

下载程序&#xff0c;如果不清楚怎么下载程序请查看https://blog.csdn.net/qq_27558597/article/details/117666184?spm&#61;1001.2014.3001.5502


六、程序运行结果

打开串口调试助手&#xff0c;波特率设置为74880bps&#xff08;esp8266默认波特率&#xff09;

全部内容如下&#xff1a;


ets Jan 8 2013,rst cause:2, boot mode:(3,6)
load 0x40100000, len 25964, room 16
tail 12
chksum 0xec
ho 0 tail 12 room 4
load 0x3ffe8000, len 1272, room 12
tail 12
chksum 0x76
ho 0 tail 12 room 4
load 0x3ffe8500, len 1688, room 12
tail 12
chksum 0xc2
csum 0xc2
->SPI_FLASH_SIZE_MAP &#61; 4
->system_partition_table_regist success
V2
Mo
&#xfffd;rf cal sector: 1019
freq trace enable 0
rf[112] : 00
rf[113] : 00
rf[114] : 01
SDK ver: 3.0.4(9532ceb) compiled &#64; May 22 2020 16:26:04
phy ver: 1156_0, pp ver: 10.2
-------------------------------------------------------------
->ESP8266 IoT
->SDK: 3.0.4(9532ceb)
->Build: Jun 9 2021 09:36:01
->CPU ID: 0x5D1487
->CPU Freq: 80MHz
->FLASH ID: 0x164020
->Heap Size: 53120Byte 51KB
data : 0x3ffe8000 ~ 0x3ffe84f6, len: 1270
rodata: 0x3ffe8500 ~ 0x3ffe8b98, len: 1688
bss : 0x3ffe8b98 ~ 0x3ffeef48, len: 25520
heap : 0x3ffeef48 ~ 0x3fffc000, len: 53432
-------------------------------------------------------------
ucTimeCnt &#61; 1
ucTimeCnt &#61; 2
ucTimeCnt &#61; 3
ucTimeCnt &#61; 4
ucTimeCnt &#61; 5
ucTimeCnt &#61; 6
ucTimeCnt &#61; 7
ucTimeCnt &#61; 8
ucTimeCnt &#61; 9
ucTimeCnt &#61; 10
ucTimeCnt &#61; 11
ucTimeCnt &#61; 12

可以看到&#xff0c;程序间隔200ms打印出计数值。


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 本文介绍了GTK+中的GObject对象系统,该系统是基于GLib和C语言完成的面向对象的框架,提供了灵活、可扩展且易于映射到其他语言的特性。其中最重要的是GType,它是GLib运行时类型认证和管理系统的基础,通过注册和管理基本数据类型、用户定义对象和界面类型来实现对象的继承。文章详细解释了GObject系统中对象的三个部分:唯一的ID标识、类结构和实例结构。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有