Ebullient第一阶段开发小结

一. 简介

距离Ebullient硬件发布已有一段时间,小一个月吧,在这段时间内在努力的编写代码,现在终于完成了第一阶段的功能设计,算是一个小型的样机吧,基本的代码框架基本确定了,相信后续的会快一点(希望如此吧),下面就给大家介绍一下整体的软件框架与具体功能的介绍吧。

二. 软件框架

  1. 第一点就是核的使用,主控是ESP32S3双核,所以本次将两个核都使用起来了,一个核用来跑界面,另外一个核用来跑驱动相关的代码,两个核之间的通讯使用全局变量,一个核只置位变量,另外一个核只复位变量,尽量的保证变量的值不出错。使用全局变量可能不妥的地方,后期可能会根据需要换成消息队列、信号量等等RTOS中进程间通讯的方法。

请添加图片描述

  1. 第二点就是LVGL的页面管理,在整个设计的过程中,会涉及到非常多的界面,如果在开始的时候就对它们进行初始化,内存肯定是吃不消的,只有加载对应的页面的时候,才对其进行初始化;还有界面之间的切换,如何优雅便捷的进行切换也是一个难点。

    页面管理的的过程大概如下,将新页面的初始化函数,以及页面ID等等相关的数据添加到页面堆里面,如果页面管理通过页面ID来进行当前页面的显示,最简单的管理过程就是这样的。本次实现的页面管理在之前发布过的一个页面管理的代码上进行了修改和完成,使其更加完善。

    每个页面都添加了一些新的属性: 父页面ID,子页面ID,回调函数设置函数指针。父页面ID和子页面ID可以让界面间的切换更加优雅高效。而回调函数设置函数指针(后续可能会添加界面销毁的函数指针),类似于C++类的析构和构造函数,更加优雅高效的初始化、复位变量和释放资源。

请添加图片描述

  1. 第三点就是LVGL界面与功能函数。这将其分成了两个.c文件进行编写,一个只用于对界面进行初始化,另外一个用来响应界面相关的动作;这样在后续的界面优化与功能优化会简单很多。

以上,就是当前的一个软件架构了,感兴趣的话可以访问Gitee仓库自行下载: https://gitee.com/whpUp/ebullient

三. 软件功能

FPGA之旅 出品

在硬件发布的时候,已经明确了三大基本功能,所以本次阶段性总结也是围绕这点:

  1. 音乐播放:可以通过读取TF卡中的WAV音乐文件进行音乐的播放,暂停,快进,上一曲和下一曲等基本功能,另外还通过DSP库提供的FFT函数进行音乐的频谱分析,在界面上绘制音乐的频谱图。
  2. 通讯: 完成了WIFI连接和TCP服务器的连接,WIFI和TCP的信息存储在TF卡中,方便修改(蓝牙和WIFI类似,放在后面做);完成了NRF2.4GL01底层驱动,可以完成与其进行数据的读写。本次只实现了通讯的可行性,确保了三种方式的正确性,还未完成具体的通讯协议,将在下一阶段中完成。
  3. OTA升级: 完成了从TF卡中加载固件进行升级,验证了OTA升级的可行性,下一阶段再扩展到WIFI,蓝牙和NRF2.4GL01无线通讯进行升级。

以上就是这三个主要功能完成的一个基本情况,还有许多不完善的情况,需要在下一阶段进一步的完善。

最后就是一个演示视频啦:
跳转链接(公众号)

需要实物的也可以私聊哦,感兴趣的话可以访问Gitee仓库自行下载: https://gitee.com/whpUp/ebullient

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/257560.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创建自定义 gym env 教程

gym-0.26.1 pygame-2.1.2 自定义环境 GridWolrdEnv 教程参考 官网自定义环境 ,我把一些可能有疑惑的地方讲解下。 首先整体文件结构, 这里省略了wrappers gym-examples/main.py # 这个是测试自定义的环境setup.py gym_examples/__init__.pyenvs/__init__.pygri…

Oracle的学习心得和知识总结(三十一)| ODBC开放式数据库连接概述及应用程序开发

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…

网工内推 | 美团、中通快递,网络运维,最高30K*15薪

01 美团 招聘岗位:网络运维开发工程师 职责描述: 1.负责新零售业务门店/仓库网络的日常运维、故障处理、应急响应,保障网络及相关业务的稳定运行,处理突发事件、对疑难问题进行跟踪并最终解决。 2.负责新零售业务门店/仓库网络的…

Neural Network——神经网络

1.feature reusing——特征复用 1.1 什么是特征复用 回顾我们之前所学习的模型,本质上都是基于线性回归,但却都可以运用于非线性相关的数据,包括使用了如下方法 增加更多的特征产生新的特征(多项式回归)核函数 在本身…

router全局守卫beforeEach导致infinite redirect in navigation guard 问题

问题背景 路由加了全局守卫之后,报错: 分析原因 内部判断,导致路由产生了死循环 错误代码 router.beforeEach((to, from, next) > {if (store.getters.token) {if (to.path /login) {next(/)} else {next()}} else {next(/login)} })…

MeterSphere files 任意文件读取漏洞复现 (CVE-2023-25573)

0x01 产品简介 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能,全面兼容 JMeter、Selenium 等主流开源标准。 0x02 漏洞概述 MeterSphere /api/jmeter/download/files 路径文件存在文件读取漏洞,攻击者可通过该漏洞读取系统重要…

卸载MySQL——Windows

1. 停止MySQL服务 winR 打开运行,输入 services.msc 点击 “确定” 调出系统服务。 我这里只有一个,只要是以MySQL开头的全部停止 2. 卸载MySQL相关组件 打开控制面板 —> 卸载程序 —> 卸载MySQL相关所有组件 3. 删除MySQL安装目录 一般是C:\P…

win11 wsl2安装

参考视频 微软商店直接下载以后(提前打开虚拟化,linux子系统选项) 设置为wsl2 wsl --set-default-version 2然后直接打开即可 可能遇到的问题 WSL2 占位程序接收到错误数据。 Error code: Wsl/Service/0x800706f7 管理员权限启动,重启 …

蓝桥杯嵌入式——串口

CUBE里配置成异步模式,设置波特率,打开中断(先配置LCD再配置串口): 串口发送 main.c #include "string.h" char temp[20]; sprintf(temp,"Hello World\r\n"); HAL_UART_Transmit(&huart1,(…

AutoSAR(基础入门篇)1.3-AutoSAR的概述

目录 一、到底什么是AutoSAR 1、大白话来讲 2、架构上来讲 应用软件层(APPL) 实时运行环境(RTE) 基础软件层(BSW) 3、工具链上来讲 二、AutoSAR的目标 一、到底什么是AutoSAR 1、大白话来讲 AUTOSAR 就是AUTomotive Open System ARchitecture的…

文件操作学习总结

磁盘上的⽂件是⽂件。 但是在程序设计中,我们⼀般谈的⽂件有两种: 程序⽂件、数据⽂件 (从⽂件功能的⻆度来分类 的)。 程序⽂件 : 程序⽂件包括源 程序⽂件(后缀为.c) , ⽬标⽂件&#xff0…

【操作系统】|浅谈IO模型

I/O(Input/Output)指的是应用程序与外部环境之间的数据交换。I/O 操作涉及从外部设备(如硬盘、网络、键盘、鼠标等)读取数据或向外部设备写入数据。 操作系统启动后,将会开启保护模式:将内存分为内核空间&…

Linux I/O神器之io_uring

io_uring 是 Linux 于 2019 年加入到内核的一种新型异步 I/O 模型,io_uring 主要为了解决 原生AIO(Native AIO) 存在的一些不足之处。下面介绍一下原生 AIO 的不足之处: 系统调用开销大:提交 I/O 操作和获取 I/O 操作…

Unity中 URP 下的棋盘格Shader

文章目录 前言一、制作思路法1&#xff1a;使用纹理采样后&#xff0c;修改重铺效果法2&#xff1a;计算实现 二、粗略计算实现棋盘格效果1、使 uv.x < 0.5 区域 0 。反之&#xff0c; 0.52、使 uv.y < 0.5 区域 0 。反之&#xff0c; 0.53、使两个颜色相加4、取小数…

Selenium Wire - 扩展 Selenium 能够检查浏览器发出的请求和响应

使用 Selenium 进行自动化操作时&#xff0c;会存在很多的特殊场景&#xff0c;比如会修改请求参数、响应参数等。 本篇将介绍一款 Selenium 的扩展&#xff0c;即能够检查浏览器发出的请求和响应 - Selenium Wire。 简介 Selenium Wire 扩展了 Selenium 的 Python 绑定&…

修复泰坦陨落2缺少msvcr120.dll的5种方法,亲测有效

游戏《泰坦陨落2》缺少msvcr120.dll的问题困扰着许多玩家。这个问题的主要原因可能是系统环境不完整、软件或游戏版本不匹配、DLL文件丢失或损坏以及杀毒软件误判等。msvcr120.dll是Microsoft Visual C 2013 Redistributable的一个组件&#xff0c;它包含了许多运行库文件&…

JavaScript中的await-async-事件循环-异常处理

一、async、await 1.异步函数 async function async关键字用于声明一个异步函数&#xff1a; async是asynchronous单词的缩写&#xff0c;异步、非同步&#xff1b; sync是synchronous单词的缩写&#xff0c;同步、同时&#xff1b; async异步函数可以有很多中写法&#x…

Java 数据结构篇-实现堆的核心方法与堆的应用(实现 TOP-K 问题:最小 k 个数)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 堆的说明 2.0 堆的成员变量及其构造方法 3.0 实现堆的核心方法 3.1 实现堆的核心方法 - 获取堆顶元素 peek() 3.2 实现堆的核心方法 - 下潜 down(int i) 3.3 实…

关键点检测_labelme标注的json,随机裁剪(添加偏移相当于数据增强)

import json import os import numpy as np import cv2 import glob import csv import random#通过表格获取csv # def csv_tws(root, name): # csv_path = root+"/csv/{}.png.csv".format(name)

Java并发(二十)----synchronized原理进阶

1、小故事 故事角色 老王 - JVM 小南 - 线程 小女 - 线程 房间 - 对象 房间门上 - 防盗锁 - Monitor-重量级锁 房间门上 - 小南书包 - 轻量级锁 房间门上 - 刻上小南大名 - 偏向锁 -对象专属于某个线程使用 批量重刻名 - 一个类的偏向锁撤销到达 20 阈值 -批量重偏向 …