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

GD32裸机程序-SFUD接口文件记录

SFUD gitee地址

SFUD

spi初始化

/********************************************************************************* @file           : bsp_spi.c* @author         : shchl* @brief          : None* @version        : 1.0* @attention      : None* @date           : 25-4-16******************************************************************************
*/
#include "bsp.h"
#include "bsp_spi.h"void bsp_spi_init(void)
{spi1_init();
}void spi1_init(void)
{rcu_periph_clock_enable(RCU_SPI1);// gpiogpio_mode_set(GPIOB,GPIO_MODE_OUTPUT,GPIO_PUPD_NONE,GPIO_PIN_12);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_12);/* SPI1 GPIO config */gpio_af_set(GPIOB, GPIO_AF_5,GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_NONE,GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_MAX,GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15);/* chip select invalid */gpio_bit_set(GPIOB,GPIO_PIN_12);spi_parameter_struct spi_init_struct;/* SPI1 parameter config */spi_init_struct.trans_mode = SPI_TRANSMODE_FULLDUPLEX;spi_init_struct.device_mode = SPI_MASTER;spi_init_struct.frame_size = SPI_FRAMESIZE_8BIT;spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;spi_init_struct.nss = SPI_NSS_SOFT;spi_init_struct.prescale = SPI_PSC_2;spi_init_struct.endian = SPI_ENDIAN_MSB;spi_crc_off(SPI1);spi_init(SPI1, &spi_init_struct);/* Enable SPI_MASTER */spi_enable(SPI1);
}

sfud_port.c文件修改

#include <sfud.h>
#include <stdarg.h>
#include <stdio.h>
#include <gd32f4xx.h>typedef struct
{uint32_t spix;uint32_t cs_gpiox;uint16_t cs_gpio_pin;
} spi_user_data, *spi_user_data_t;static char log_buf[256];void sfud_log_debug(const char* file, const long line, const char* format, ...);static void spi_lock(const sfud_spi* spi)
{__disable_irq();
}static void spi_unlock(const sfud_spi* spi)
{__enable_irq();
}/*** SPI write data then read data*/
static sfud_err spi_write_read(const sfud_spi* spi, const uint8_t* write_buf, size_t write_size, uint8_t* read_buf,size_t read_size)
{sfud_err result = SFUD_SUCCESS;uint8_t send_data, read_data;spi_user_data* spix = (spi_user_data*)spi->user_data;if (write_size){SFUD_ASSERT(write_buf);}if (read_size){SFUD_ASSERT(read_buf);}gpio_bit_reset(spix->cs_gpiox, spix->cs_gpio_pin);/* 开始读写数据 */for (size_t i = 0, retry_times; i < write_size + read_size; i++){/* 先写缓冲区中的数据到 SPI 总线,数据写完后,再写 dummy(0xFF) 到 SPI 总线 */if (i < write_size){send_data = *write_buf++;}else{send_data = SFUD_DUMMY_DATA;}/* 发送数据 */retry_times = 1000;while (RESET == spi_i2s_flag_get(spix->spix, SPI_FLAG_TBE)){SFUD_RETRY_PROCESS(NULL, retry_times, result);}if (result != SFUD_SUCCESS){goto exit;}// Send the bytespi_i2s_data_transmit(spix->spix, send_data);/* 接收数据 */retry_times = 1000;//Wait until a data is receivedwhile (RESET == spi_i2s_flag_get(spix->spix, SPI_FLAG_RBNE)){SFUD_RETRY_PROCESS(NULL, retry_times, result);}// Get the received dataif (result != SFUD_SUCCESS){goto exit;}read_data = spi_i2s_data_receive(spix->spix);/* 写缓冲区中的数据发完后,再读取 SPI 总线中的数据到读缓冲区 */if (i >= write_size){*read_buf++ = read_data;}}exit:gpio_bit_set(spix->cs_gpiox, spix->cs_gpio_pin);return result;
}/* about 100 microsecond delay */
static void retry_delay_100us(void)
{uint32_t delay = 120;while (delay--);
}static spi_user_data spi1 = {.spix = SPI1, .cs_gpiox = GPIOB, .cs_gpio_pin = GPIO_PIN_12};sfud_err sfud_spi_port_init(sfud_flash* flash)
{sfud_err result = SFUD_SUCCESS;switch (flash->index){case SFUD_25Q128_DEVICE_INDEX:{/* 同步 Flash 移植所需的接口及数据 */flash->spi.wr = spi_write_read;flash->spi.lock = spi_lock;flash->spi.unlock = spi_unlock;flash->spi.user_data = &spi1;/* about 100 microsecond delay */flash->retry.delay = retry_delay_100us;/* adout 60 seconds timeout */flash->retry.times = 60 * 10000;break;}default:result = SFUD_ERR_NOT_FOUND;break;}return result;
}/*** This function is print debug info.** @param file the file which has call this function* @param line the line number which has call this function* @param format output format* @param ... args*/
void sfud_log_debug(const char* file, const long line, const char* format, ...)
{va_list args;/* args point to the first variable parameter */va_start(args, format);// printf("[SFUD](%s:%ld) ", file, line);/* must use vprintf to print */vsnprintf(log_buf, sizeof(log_buf), format, args);printf("%s\r\n", log_buf);va_end(args);
}/*** This function is print routine info.** @param format output format* @param ... args*/
void sfud_log_info(const char* format, ...)
{va_list args;/* args point to the first variable parameter */va_start(args, format);printf("[SFUD]");/* must use vprintf to print */vsnprintf(log_buf, sizeof(log_buf), format, args);printf("%s\r\n", log_buf);va_end(args);
}

相关文章:

GD32裸机程序-SFUD接口文件记录

SFUD gitee地址 SFUD spi初始化 /********************************************************************************* file : bsp_spi.c* author : shchl* brief : None* version : 1.0* attention : None* date : 25-…...

天元证券|调仓曝光!首批科技基金一季报出炉

4月15日&#xff0c;中欧基金、永赢基金、长城基金等公募基金公司旗下部分权益类基金产品一季报出炉。 券商中国记者梳理发现&#xff0c;永赢信息产业智选混合主要聚焦信息技术领域布局&#xff0c;前十大重仓股中9只股票属于信息技术行业&#xff0c;合计占基金资产净值比例达…...

【开源项目】Excel手撕AI算法深入理解(四):AlphaFold、Autoencoder

项目源码地址&#xff1a;https://github.com/ImagineAILab/ai-by-hand-excel.git 一、AlphaFold AlphaFold 是 DeepMind 开发的突破性 AI 算法&#xff0c;用于预测蛋白质的三维结构。它的出现解决了生物学领域长达 50 年的“蛋白质折叠问题”&#xff0c;被《科学》杂志评为…...

React-router v7 第四章(路由传参)

参数传递 React-router 一共有三种方式进行参数传递&#xff0c;参数传递指的是在路由跳转时&#xff0c;将参数传递给目标路由。 Query方式 Query的方式就是使用 ? 来传递参数&#xff0c;例如&#xff1a; #多个参数用 & 连接 /user?name小满zs&age18跳转方式&…...

常用密码技术初探

记得前几年有一部电影叫做《解除好友2&#xff1a;暗网》&#xff0c;它讲述了主角捡到一台电脑&#xff0c;并用它与好友进行视频通讯&#xff0c;但一名黑客通过网络技术篡改了通讯内容&#xff0c;最终导致所有参与视频通话的人都遭遇不测。 电影当然存在夸张成分&#xff…...

电脑知识 | TCP通俗易懂详解 <二>tcp首部

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f583;TCP快递单填写&#xff08;必填部分&#xff09; 1.&#x1f338;TCP快递单样式 2.&#x1f3e2;填写名称 3.&#x1f522;TCP序号 4. ✔️TCP确认号 ​编辑5.✅️确认号的确认号 6.&#x1f4cf;首部长度 …...

09-RocketMQ 深度解析:从原理到实战,构建可靠消息驱动微服务

RocketMQ 深度解析&#xff1a;从原理到实战&#xff0c;构建可靠消息驱动微服务 一、RocketMQ 核心定位与架构探秘 1.1 分布式消息领域的中流砥柱 在分布式系统中&#xff0c;消息队列是实现异步通信、解耦服务、削峰填谷的关键组件。RocketMQ 作为阿里巴巴开源的分布式消息…...

MyBatis 如何使用

1. 环境准备 添加依赖&#xff08;Maven&#xff09; 在 pom.xml 中添加 MyBatis 和数据库驱动依赖&#xff1a; <dependencies><!-- MyBatis 核心库 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId&g…...

AI日报 - 2025年04月17日

&#x1f31f; 今日概览(60秒速览) ▎&#x1f916; AGI突破 | OpenAI新模型或证人类未解定理&#xff0c;研究达Level 4 OpenAI安全博客暗示模型将创造新科学&#xff0c;能连接概念提新实验。CEO预测AI将证明人类未解定理&#xff0c;研究员称已达AGI第四层级。 ▎&#x1f4…...

【Leetcode-Hot100】缺失的第一个正数

题目 解答 有一处需要注意&#xff0c;我使用注释部分进行交换值&#xff0c;报错&#xff1a;超出时间限制。有人知道是为什么吗&#xff1f;难道是先给nums[i]赋值后&#xff0c;从而改变了后一项的索引&#xff1f; class Solution(object):def firstMissingPositive(sel…...

Servlet简单示例

Servlet简单示例 文章说明 Servlet 虽然是一门旧技术了&#xff0c;但是它的基础性和广泛性仍然不可忽视&#xff1b;我在实践中发现不少同学经常会被它的一些特性给困惑住&#xff1b;时常出现404等错误&#xff0c;这里我写下这篇文章&#xff0c;介绍Servlet的不同版本的特…...

spring:注解@Component、@Controller、@Service、@Reponsitory

背景 spring框架的一个核心功能是IOC&#xff0c;就是将Bean初始化加载到容器中&#xff0c;Bean是如何加载到容器的&#xff0c;可以使用spring注解方式或者spring XML配置方式。 spring注解方式直接对项目中的类进行注解&#xff0c;减少了配置文件内容&#xff0c;更加便于…...

LLM做逻辑推理题 - 野鸭蛋的故事

题目: 四个旅游家&#xff08;张虹、印玉、东晴、西雨&#xff09;去不同的岛屿去旅行&#xff0c;每个人都在岛上发现了野鸡蛋&#xff08;1个到3个&#xff09;。4人的年龄各不相同&#xff0c;是由18岁到21岁。已知&#xff1a; ①东晴是18岁。 ②印玉去了A岛。 ③21岁的女…...

Linux的目录结构(介绍,具体目录结构)

目录 介绍 具体目录结构 简洁的目录解释 详细的目录解释 介绍 Linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构的最上层是根目录“/”。Linux的世界中&#xff0c;一切皆文件&#xff08;比如&#xff1a;Linux会把硬件映射成文件来管理&#xff09; 具体目…...

C++Cherno 学习笔记day21 [86]-[90] 持续集成、静态分析、参数计算顺序、移动语义、stdmove与移动赋值操作符

b站Cherno的课[86]-[90] 一、C持续集成二、C静态分析三、C的参数计算顺序四、C移动语义五、stdmove与移动赋值操作符 一、C持续集成 Jenkins 商业软件 二、C静态分析 静态分析器会检查你的代码&#xff0c;并尝试检测各种错误&#xff0c;这些错误 可能是你无意中编写的&am…...

python学习 -- 综合案例1:设计一款基于python的飞机大战小游戏

本文目录 pygame模块介绍核心模块与功能开发流程 本文案例 - 飞机大战开发流程1. 导入必要的库2. 定义常量3. 创建精灵类4. 主程序 运行游戏 总结 pygame模块介绍 Pygame 是基于 Python 的开源、跨平台游戏开发库&#xff0c;依托 SDL&#xff08;Simple DirectMedia Layer&am…...

开启 Python 编程之旅:基础入门实战班全解析

重要的东西放前面 开启 Python 编程之旅&#xff1a;基础入门实战班全解析 开启Python编程之旅&#xff1a;基础入门实战班全解析 在当下热门的编程语言中&#xff0c;Python凭借简洁易读的语法、强大的功能和丰富的库&#xff0c;在数据科学、人工智能、Web开发等诸多领域大…...

Linux笔记---动静态库(原理篇)

1. ELF文件格式 动静态库文件的构成是什么样的呢&#xff1f;或者说二者的内容是什么&#xff1f; 实际上&#xff0c;可执行文件&#xff0c;目标文件&#xff0c;静态库文件&#xff0c;动态库文件都是使用ELF文件格式进行组织的。 ELF&#xff08;Executable and Linkable…...

SpringBoot整合Logback日志框架深度实践

一、依赖与默认集成机制 SpringBoot从2.x版本开始默认集成Logback日志框架&#xff0c;无需手动添加额外依赖。当项目引入spring-boot-starter-web时&#xff0c;该组件已包含spring-boot-starter-logging&#xff0c;其底层实现基于LogbackSLF4J组合。这种设计使得开发者只需…...

Spring Boot中接入DeepSeek的流式输出

第一步&#xff0c;添加依赖&#xff1a; <!-- WebFlux 响应式支持 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId> </dependency> 第二步&#xff0c;配置We…...

路由交换网络专题 | 第四章 | 生成树 | VRRP | 边缘端口

拓扑图 &#xff08;1&#xff09;SW1、SW2、SW3 三台交换机之间存在环路问题&#xff0c;需要通过生成树协议破环&#xff0c;请简述二层环路可能导致的问题。 因为交换机在收到一个广播帧之后&#xff0c;会对非接收端口进行转发。每台交换机都转发的话&#xff0c;就行形成一…...

SFOS2:常用容器(布局)介绍

一、前言 最近在进行sailfish os的开发&#xff0c;由于在此之前并没有从事过QT开发的工作&#xff0c;所以对这一套颇为生疏&#xff0c;以此记录一下。以下内容不一定完全准确&#xff0c;开发所使用的是Qt Quick 2.6与Sailfish.Silica 1.0两个库。 二、布局 1.Qt Quick 2.…...

VS qt 联合开发环境下的多国语言翻译

添加Linguist 文件方法&#xff0c;如同添加类文件的方式&#xff0c;那样&#xff1a; 其他跟QT的一样的流程&#xff0c;另外在main函数里要注册一下&#xff0c; QTextCodec::setCodecForLocale(textCodec); QTranslator translator5; QString trans5 fi…...

基于 Python 的 ROS2 应用开发全解析

引言 在机器人操作系统&#xff08;ROS&#xff09;不断发展的进程中&#xff0c;ROS2 作为新一代的机器人框架&#xff0c;带来了诸多显著的改进与新特性。Python 作为一种简洁、高效且具有强大数据处理能力的编程语言&#xff0c;在 ROS2 应用开发中占据着重要地位。本文将深…...

AI分析师

01 实操 人工 公司需要开发了一个XX系统&#xff0c;在文件夹中包含了XX.csv&#xff0c;其中每一行表示一个XX样本&#xff0c;最后一列为每个样本的标签&#xff0c;现需要设计模型与系统&#xff0c;请按照以下要求完成算法测试。根据要求完成以下任务&#xff0c;将完成的…...

Redis核心数据类型在实际项目中的典型应用场景解析

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis作为高性能的键值存储系统&#xff0c;在现代软件开发中扮演着重要角色。其多样化的数据结构为开发者提供了灵活的解决方案&#xff0c;本文将通过真实项…...

LLamaIndex中经常使用的三个模块

from aiostream import stream from fastapi import Request from fastapi.responses import StreamingResponse from llama_index.core.chat_engine.types import StreamingAgentChatResponse这四个模块每一个都很实用&#xff0c;在实际开发中经常用到&#xff0c;下面我就详…...

Idea集成AI:CodeGeeX开发

当入职新公司&#xff0c;或者调到新项目组进行开发时&#xff0c;需要快速熟悉项目代码 而新的项目代码&#xff0c;可能有很多模块&#xff0c;很多的接口&#xff0c;很复杂的业务逻辑&#xff0c;更加有与之前自己的代码风格不一致的现有复杂代码 更别提很多人写代码不喜…...

软考 中级软件设计师 考点知识点笔记总结 day12 计算机网络基础知识

文章目录 计算机网络基础5.1、计算机网络基础知识5.1.1 计算机网络分类5.1.2 七层网络体系结构5.1.3 网络标准5.1.4 TCP/IP协议族5.1.5 IP地址和IPv6简介5.1.6 Internet服务 计算机网络基础 要求掌握以下内容 5.1、计算机网络基础知识 网络体系结构 传输介质 传输技术 传输…...

【扩散模型(十三)】Break-A-Scene 可控生成,原理与代码详解(中)Cross Attn Loss 代码篇

系列文章目录 【扩散模型&#xff08;一&#xff09;】中介绍了 Stable Diffusion 可以被理解为重建分支&#xff08;reconstruction branch&#xff09;和条件分支&#xff08;condition branch&#xff09;【扩散模型&#xff08;二&#xff09;】IP-Adapter 从条件分支的视…...

C语言数字图像处理---2.31统计滤波器

本文介绍空域滤波器中的一种:统计滤波器 [定义与算法] 统计滤波(Statistic Filter)定义:基于图像处理中的邻域统计方法,对邻域内的像素信息进行统计,如基于均值和方差的信息,用于平滑或去噪图像,同时保留边缘信息。 算法步骤如下: 统计滤波器的优点和缺点主要包…...

流程设计实战:流程架构设计六步法

目录 简介 1、梳理业务模式及场景 2、甄别核心业务能力 3、搭建差异化的业务流程框架 4、定义L4流程能力 5、L4流程串联 6、展开L5业务流程 作者简介 简介 以往在设计流程的时候&#xff0c;我多数都是采用的自下而上的方式&#xff0c;从具体场景、具体问题出发去做流…...

SDK游戏盾如何接入?复杂吗?

接入SDK游戏盾&#xff08;通常指游戏安全防护类SDK&#xff0c;如防DDoS攻击、防作弊、防外挂等功能&#xff09;的流程和复杂度取决于具体的服务商&#xff08;如腾讯云、上海云盾等&#xff09;以及游戏类型和技术架构。以下是一般性的接入步骤、复杂度评估及注意事项&#…...

STM32F103C8T6 单片机入门基础知识及点亮第一个 LED 灯

目录 一、引言 二、STM32F103C8T6 基本特性 1. 内核与性能 2. 存储器 3. 时钟系统 4. GPIO&#xff08;通用输入输出&#xff09; 5. 外设 三、开发环境搭建 1. 硬件准备 2. 软件安装 四、点亮第一个 LED 灯 1. 硬件连接 2. 软件实现 &#xff08;1&#xff09;创…...

JavaScript Worker池实现教程

JavaScript Worker池实现教程 Worker池是一种管理和复用Web Workers的有效方法&#xff0c;可以在不频繁创建和销毁Worker的情况下&#xff0c;充分利用多线程能力提升应用性能。下面我将详细介绍如何在JavaScript中实现一个功能完善的Worker池。 为什么需要Worker池&#xf…...

【统信UOS操作系统】python3.11安装numpy库及导入问题解决

一、安装Python3.11.4 首先来安装Python3.11.4。所用操作系统&#xff1a;统信UOS 前提是准备好Python3.11.4的安装包&#xff08;可从官网下载&#xff08;链接&#xff09;&#xff09;&#xff0c;并解压到本地&#xff1a; 右键&#xff0c;选择“在终端中打开”&#xff…...

Navicat导入JSON数据到MySQL表

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Navicat导入JSON数据到MySQL表1. 导入入口2.…...

体育比分小程序怎么提示日活

要提高体育比分小程序的日活跃用户(DAU)&#xff0c;您可以考虑以下几个方面的策略&#xff1a; 一、核心功能优化 1.实时推送&#xff1a;确保比分更新真正实时&#xff0c;延迟不超过2秒&#xff0c;推荐接入熊猫比分API体育数据&#xff0c;比分实时更新 2.个性化订阅&am…...

【星海随笔】Python-JSON数据的处理

JSON 是一种轻量级的数据交换格式&#xff0c;主要用于在客户端和服务器之间传输数据。 JSON 在 python 里是一个标准库 https://www.jyshare.com/compile/9/ import json data {name: Alice, age: 30, city: New York} json_string json.dumps(data) print(json_string)js…...

Tomcat与Servlet

目录 1 Tomcat 1.1 目录结构 1.2 启动服务器 1.3 部署 2 Servlet 2.1 创建项目 &#xff08;1&#xff09;创建Maven项目 &#xff08;2&#xff09;目录结构 &#xff08;3&#xff09;引入依赖 &#xff08;4&#xff09;创建必要的目录结构 &#xff08;5&#xf…...

MySQL MVCC工作流程详解

MySQL MVCC工作流程详解 1. 基础概念 MVCC&#xff08;多版本并发控制&#xff09;是通过在每行记录后面保存多个版本来实现并发控制的技术&#xff0c;主要用于提供并发事务访问数据库时的读一致性。 2. 核心要素 2.1 事务ID&#xff08;DB_TRX_ID&#xff09; 每个事务都…...

unityTEngine 框架学习记录1

目前项目再用QF框架其中的UI部分&#xff0c;突然有天想学习一下其他好用的框架UI&#xff0c;根据我多年网友胖菊大佬的推荐TE映入眼帘,网上找了一下发现学习教程没有几个&#xff0c;不太适合啥都不会的小白&#xff0c;然后我就加入了ET官方群&#xff0c;里面人长得又帅又有…...

算法的时间复杂度

整理了下算法的时间复杂度&#xff0c;跟大家一起分享下。 时间复杂度O是表示算法运行时间与输入数据规模&#xff08;通常用 n 表示&#xff09;之间的关系。算法执行时间随输入数据规模增长的变化趋势。 1、O(1) — 常数时间 无论输入数据多大&#xff0c;执行时间固定不变…...

深度学习 从入门到精通 day_01

Pytorch安装 torch安装 python版本3.9.0 在官方文档里面找到适合你设备的PyTorch版本及对应的安装指令执行即可&#xff1a;https://pytorch.org/get-started/previous-versions/ 针对我的网络及设备情况&#xff0c;我复制了如下指令完成了Torch的安装&#xff1a; …...

AutoToM:让AI像人类一样“读心”的突破性方法

引言&#xff1a;AI如何理解人类的“内心世界”&#xff1f; 如何让AI像人类一样理解他人的意图、情感和动机&#xff1f;这一问题的核心是心智理论&#xff08;Theory of Mind, ToM&#xff09;&#xff0c;即通过观察行为推断心理状态的能力。近日&#xff0c;约翰霍普金斯大…...

Java实现Redis

String类型 代码 package com.whop.changyuan2.redisTest;import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.cor…...

DAY09:【pytorch】nn网络层

1、卷积层 1.1 Convolution 1.1.1 卷积操作 卷积运算&#xff1a;卷积核在输入信号&#xff08;图像&#xff09;上滑动&#xff0c;相应位置上进行乘加卷积核&#xff1a;又称为滤波器、过滤器&#xff0c;可认为是某种模式、某种特征 1.1.2 卷积维度 一般情况下&#xf…...

河南普瑞维升企业案例:日事清SOP流程与目标模块实现客户自主简报功能落地

公司简介&#xff1a; 河南普瑞维升企业管理咨询有限公司成立于2017年&#xff0c;目前公司主营业务是为加油站提供全方面咨询管理服务&#xff0c;目前公司成功运营打造河南成品油&#xff0c;运营站点15座&#xff0c;会员数量已达几十万&#xff0c;在加油站周边辐射区域内…...

LeetCode面试热题150中19-22题学习笔记(用Java语言描述)

Day 04 19、最后一个单词的长度 需求&#xff1a;给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 代码表示 public class Q19_1 {p…...

车载刷写架构 --- 刷写流程中重复擦除同一地址的问题分析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…...