【N32WB03x SDK使用指南】
【N32WB03x SDK使用指南】
- 1. 简介
- 1.1 产品简介
- 1.2 主要资源
- 1.3 典型应用
- 2. SDK/开发固件文件目录结构
- 2.1 doc
- 2.2 firmware
- 2.3 middleware
- 2.4 utilities
- 2.5 projects Projects
- 3. 项目配置与烧录
- 3.1 编译环境安装
- 3.2 固件支持包安装
- 3.3 编译环境配置
- 3.4 编译与下载
- 3.5 BLE工程目录结构
- 4 Memory分配
- 4.1 Flash分配
- 4.2 RAM
- 5. 系统时钟
- 5.1 不带蓝牙协议栈例程
- 5.2 蓝牙例程
N32WB031_STB 开发板:https://www.nationstech.com/uploadfile/file/20230206/1675669890941879.zip
1. 简介
此文档的目的在于让使用者能够快速熟悉N32WB03x系列蓝牙SOC芯片的开发套件以及Keil MDK-ARM的相关设定,以减少开发前期的准备时间,降低开发难度。
官网地址:https://www.nationstech.com/cpjs273/
文档地址:https://www.nationstech.com/uploadfile/file/20230206/1675671659217095.pdf
1.1 产品简介
N32WB03x系列蓝牙芯片是国民技术新一代高性能、超低功耗的蓝牙5.1芯片,采用32位Arm® Cortex®-M0内核,最高工作主频64MHz,片上集成48KB SRAM,256/512KB Flash。芯片集成先进的 BLE5.1射频收发器,符合蓝牙BLE5.1规范,可配置为标准的1Mbps BLE模式,2Mbps增强BLE模式, 125Kbps BLE远程模式(S8),500Kbps BLE远程模式(S2)。支持AOA(到达角)和AOD(离去角),支持 RSS I ( 接 收 器 信 号 强 度 指 示 ),同 时 支 持 主 从 角 色,支 持 多 连 接,支 持 数 据 包 长 度 扩 展,支 持 KEYSCAN,IRC,10位1.33Msps ADC(可配置为16位16Ksps),支持模拟MIC输入,PGA放大,支持基 本、通用、高级TIMER,RTC,WWDG,IWDG,LPUART,USART,SPI,I2C等外设。
1.2 主要资源
1.3 典型应用
2. SDK/开发固件文件目录结构
SDK 目录下是一个以固件库版本命名的文件,其中包含五个子文件夹:
2.1 doc
即SDK相关的说明文档,包含SDK使用指南和固件升级使用指南等。
2.2 firmware
- CMSIS:
微控制器软件接口标准,是Cortex-M处理器系列的与供应商无关的硬件抽象层, CMSIS提供了内核与外设、
实时操作系统和中间设备之间的通用接口。
- 包含了用来访问内核的寄存器设备的名称定义,地址定义和配置函数。该接口包括调试通道定义。
- 提供片上所有外设的定义,包括所有外设寄存器头文件、启动文件、系统初始化模板文件。
- n32wb03x_std_periph_driver:
芯片外设的标准驱动函数,包括.c 的源文件和.h 的头文件。用户可移植到项目中,快速完成对某个外设模块的使用。
2.3 middleware
中间层固件,主要如下两个目录:
- Third_Party
FreeRTOS: FreeRTOS 相关库
- Nationstech
ble_library: 蓝牙BLE 相关库
ns_ble_stack: ble 蓝牙协议栈头文件
ns_ble_profile: ble profile 库源码
ns_library: ble 程序其他库源码,包含 log,sleep 和 timer 等
2.4 utilities
工具软件目录, 里面主要包含:
- dfu:固件升级相关工具软件目录和调用这些工具的 bat 脚本
Image:使用 bat 脚本生成的 bin 文件和用于DFU 演示的 bin 文件
JLink:烧录工具
Keys:用于生成 dfu 升级 bin 的密匙
NSAndroidUtil: DFU 测试 APK
NSUtil:串口升级工具软件和源码
2.5 projects Projects
目录包含开发板目录,开发板目录下包含:
- bsp:包含调试串口打印功能的 log 函数,用于外设例程在调试过程答应各种调试信息。
- pplication:应用例程,使用了多种外设或者功能需求的综合性例程
peripheral_alone: 外设综合例程,包含串口通信,TIM 的 PWM 输出,ADC 读取和转为电压,IO 输出,IO输入中断响应和 RTC 休眠唤醒
ble_hid_rcu:蓝牙遥控器例程,使用 KEYSCAN 模块,ADC PGA 模块读取声音和蓝牙HID 数据发 送
FreeRTOS:Freertos 相关例程
- ble:蓝牙从机例程,通过对具体 profile 的蓝牙例程了解蓝牙程序开发的基本方法
dis:设备服务例程
hid_mouse: 蓝牙鼠标例程
rdtss: 蓝牙数传例程(128bit UUID),包含 DFU空中升级项目选项
rdtss_16bit: 蓝牙数传例程(16bit UUID),包含 DFU 空中升级项目选项
heart_rate: 蓝牙心率服务例程
blood_pressure: 蓝牙血压服务例程。
- ble_central:蓝牙主机例程
central_rdtsc:蓝牙数传服务主机例程。可以配合 rdtss 例程使用。
central_rdts_c&s:蓝牙数传服务主机和从机模式切换例程。可以配合rdtss或central_rdtsc例程使用。
central_relay_1m1s:蓝牙数传服务中继例程,即一主一从同时工作。可以配合 rdtss 例程使用。
- dfu:设备固件升级例程
common: dfu 公共库目录
app_ota:蓝牙空中升级例程
image_update:单 bank模式下,image_update 例程源码
app_usart:串口升级例程(跳转 masterboot)
masterboot:固件升级 boot,包含串口升级,固件校验和跳转
- peripheral: 包含各个外设功能模块的例程项目,实现每个外设模块的基本功能应用开发,用户可以通过这些例程项目快速了解芯片外设用法。
3. 项目配置与烧录
3.1 编译环境安装
请安装KEIL MDK-ARM开发环境,版本要求为V5.00以上,建议使用V5.24.2.0。从MDK的官网可以下载得到MDK的安装包,然后安装即可,关于的MDK安装请看这个大佬的教程。
MDK安装教程:https://blog.csdn.net/bruceoxl/article/details/108548573
MDK下载地址:https://www.keil.com/download/product/
3.2 固件支持包安装
双击运行N32WB03x_DFP.1.1.0.pack安装Keil芯片支持包。
支持包地址:https://www.nationstech.com/uploadfile/file/20230206/1675669890941879.zip
3.3 编译环境配置
注:所有例程已经按如下配置完成,所以运行例程不需要重新配置编译环境。
- Target页的FLASH和RAM配置
不包含ble功能项目
包含ble功能项目target页
带DFU功能项目,请参考《固件升级使用指南.PDF》
- Linker页
勾选使用Target页的memory配置
带ble项目需要加middlewares\Nationstech\ble_library\ns_ble_stack\symdef\symbol_g15.obj文件于Misc control,注意包含蓝牙主机功能的程序使用的obj文件是symbol_g15_central.obj
- Debug页
调试器选择CMSIS-DAP Debugger作为开发板上的NS-Link
Setting页面如下图
3.4 编译与下载
编译:点击菜单的build按钮
下载:点击菜单的download按钮
调试:点击菜单的start/stop debug session按钮
注意:下载程序后无法继续再下载
可能1: 代码中将SWDIO/SWDCLK用作其他用途,导致仿真接口失效。一般情况下不建议使用仿真引 脚用作其他功能设计
可能2:芯片进入低功耗sleep模式,此时仿真接口失效,需要在唤醒状态下下载,直接reset然后下载。
3.5 BLE工程目录结构
以rdtss蓝牙项目工程为例
Project Target
N32WB03x: 蓝牙工程,不带DFU配置,一般ble项目只有这个target
OTA_IMG_1:带蓝牙OTA工程,配置为Bank1地址
OTA_IMG_2:带蓝牙OTA工程,配置为Bank2地址
目录结构如下
STARTUP:芯片启动文件
CMSIS:芯片内核配置
FWLB:芯片外设驱动库
BLE_STACK:蓝牙BLE协议栈
BLE_PROFILE:蓝牙BLE profile
NS_DUF(可选):蓝牙OTA固件升级相关库
Crypto(可选):蓝牙OTA固件升级使用的加密相关库
NS_LIB:蓝牙应用相关库
BLE_APP:蓝牙应用代码
USER:用户应用代码
CONFIG:配置文件
DOC:说明文档
1、功能说明蓝牙BLE数传服务(rdts)例程,使用128bit UUID。BLE主机连接设备后,下行数据将透传到USART1,USART1收到的数据将透传到BLE主机2、使用环境软件开发环境: KEIL MDK-ARM V5.24.2.0硬件环境: 基于N32WB031_STB开发板
3、使用说明系统配置;1、时钟源:HSI=64M2、调试串口使用的是LPUART(PB1/PB2),波特率是115200,8bit数据位,无校验位,1bit停止位,无流控。3、数据串口使用USART1(PB6/PB7),波特率115200,8bit数据位,无校验位,1bit停止位,无流控。4、蓝牙BLE名:NS_RDTSS5、LED1开机即亮,LED2指示连接状态,蓝牙连上后亮使用方法:1、编译后烧录到开发板
4、注意事项由于程序会进入sleep模式,则SWD将不能访问,请按RESET按钮后,在一秒之内执行烧录程序步骤。
main.c
/****************************************************************************** Copyright (c) 2019, Nations Technologies Inc.** All rights reserved.* ****************************************************************************** Redistribution and use in source and binary forms, with or without* modification, are permitted provided that the following conditions are met:** - Redistributions of source code must retain the above copyright notice,* this list of conditions and the disclaimer below.** Nations' name may not be used to endorse or promote products derived from* this software without specific prior written permission.** DISCLAIMER: THIS SOFTWARE IS PROVIDED BY NATIONS "AS IS" AND ANY EXPRESS OR* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE* DISCLAIMED. IN NO EVENT SHALL NATIONS BE LIABLE FOR ANY DIRECT, INDIRECT,* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.* ****************************************************************************//*** @file main.c* @author Nations Firmware Team* @version v1.0.1** @copyright Copyright (c) 2019, Nations Technologies Inc. All rights reserved.*//** @addtogroup * @{*//* Includes ------------------------------------------------------------------*/
#include "n32wb03x.h"
#include "rwip.h"
#include "ns_ble.h"
#include "ns_sleep.h"
#include "ns_delay.h"
#include "ns_log.h"
#include "app_usart.h"
#include "app_gpio.h"
#include "app_ble.h"
#if (CFG_APP_NS_IUS)
#include "ns_dfu_boot.h"
#endif/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define DEMO_STRING "\r\n Nations raw data transfer server(128bit UUID) demo \r\n"/* Private constants ---------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*//*** @brief main function* @param * @return * @note Note*/
int main(void)
{//for hold the SWD before sleepdelay_n_10us(200*1000);NS_LOG_INIT();#if (CFG_APP_NS_IUS)if(CURRENT_APP_START_ADDRESS == NS_APP1_START_ADDRESS){NS_LOG_INFO("application 1 start new ...\r\n");}else if(CURRENT_APP_START_ADDRESS == NS_APP2_START_ADDRESS){NS_LOG_INFO("application 2 start new ...\r\n");}#endifapp_ble_init();NS_LOG_INFO(DEMO_STRING);// periph init LedInit(LED1_PORT,LED1_PIN); // power ledLedInit(LED2_PORT,LED2_PIN); //connection stateLedOn(LED1_PORT,LED1_PIN); app_usart_dma_enable(ENABLE);//init textusart_tx_dma_send((uint8_t*)DEMO_STRING, sizeof(DEMO_STRING)); delay_n_10us(500);//disable usart for enter sleepapp_usart_dma_enable(DISABLE);while (1){/*schedule all pending events*/rwip_schedule();ns_sleep();}
}/*** @brief user handle before enter sleep mode* @param * @return * @note */
void app_sleep_prepare_proc(void)
{}/*** @brief user handle after wake up from sleep mode* @param * @return * @note */
void app_sleep_resume_proc(void)
{}/*** @}*/
4 Memory分配
4.1 Flash分配
N32WB031芯片FLASH地址范围是0x01000000 - 0x0107FFFF,总空间为512K字节,分为BankA、BankB两个Bank,空间大小分别是256K字节,BankA地址范围是0x01000000 - 0x0103FFFF,BankB地址范围是0x01040000 - 0x0107FFFF。用户代码运行范围只能是其中一个Bank,默认使用BankA。注意N32WB031KC系列FLASH空间是256K,即只有BankA区域。
需要使用固件升级功能请参考《固件升级使用指南.PDF》里面的FLASH内存分布章节。
4.2 RAM
N32WB031芯片RAM地址范围是0x20000000 - 0x2000BFFF,可用空间为48K字节
如果使用蓝牙功能,蓝牙协议栈将占用0x20000000 -
0x20003FFF,总共16K字节RAM,用户代码可以使用0x20004000 - 0x2000BFFF,总共32K字节RAM
如果不用蓝牙功能,则用户代码可以使用全部48K字节RAM
5. 系统时钟
5.1 不带蓝牙协议栈例程
系统时钟源可以选择HSE或者HSI,所有外设例程默认使用HSI 64M作为系统时钟源。低速时钟源可以选择外部晶体LSE 32.768K或者内部LSI 32K时钟源。
5.2 蓝牙例程
所有蓝牙例程默认使用HSI 64M作为系统时钟源,使用LSI作为低速时钟源,必须外接32M晶体为蓝牙射频专用时钟源。系统时钟源不建议更改,低速时钟源可以选择外部晶体LSE 32.768K或者内部LSI 32K时钟源,但是只能在蓝牙协议栈初始化函数里配置LSI或者LSE并初始化低速时钟源,用户代码后续不能切换低速时钟源,否则将影响蓝牙协议栈的功能。
参考文献:
官网地址:https://www.nationstech.com/cpjs273/
文档地址:https://www.nationstech.com/uploadfile/file/20230206/1675671659217095.pdf
相关文章:

【N32WB03x SDK使用指南】
【N32WB03x SDK使用指南】1. 简介1.1 产品简介1.2 主要资源1.3 典型应用2. SDK/开发固件文件目录结构2.1 doc2.2 firmware2.3 middleware2.4 utilities2.5 projects Projects3. 项目配置与烧录3.1 编译环境安装3.2 固件支持包安装3.3 编译环境配置3.4 编译与下载3.5 BLE工程目录…...

pytest测试框架——pytest.ini用法
这里写目录标题一、pytest用法总结二、pytest.ini是什么三、改变运行规则pytest.inicheck_demo.py执行测试用例四、添加默认参数五、指定执行目录六、日志配置七、pytest插件分类八、pytest常用插件九、改变测试用例的执行顺序十、pytest并行与分布式执行十一、pytest内置插件h…...

KAFKA安装与配置(带Zookeeper)2023版
KAFKA安装与配置(带Zookeeper) 一、环境准备: Ubuntu 64位 22.04,三台 二、安装JDK1.8 下载JDK1.8,我这边用的版本是jdk1.8.0_2022、解压jdk tar -zxvf jdk1.8.0_202.tar.gz 3、在/usr/local创建java文件夹,并将解压的jdk移动到/usr/local/java sudo mv jdk1.8.0_202…...

深入浅出解析ChatGPT引领的科技浪潮【AI行研商业价值分析】
Rocky Ding写在前面 【AI行研&商业价值分析】栏目专注于分享AI行业中最新热点/风口的思考与判断。也欢迎大家提出宝贵的意见或优化ideas,一起交流学习💪 大家好,我是Rocky。 2022年底,ChatGPT横空出世,火爆全网&a…...

.net 批量导出文件,以ZIP压缩方式导出
1. 首先Nuget ICSharpCode.SharpZipLib <script type"text/javascript">$(function () {$("#OutPutLink").click(function () { // 单击下文件时$.ajax({ // 先判断条件时间内没有文件url: "/Home/ExistsFile?statTime" $(&q…...

数据分析:某电商优惠卷数据分析
数据分析:某电商优惠卷数据分析 作者:AOAIYI 专栏:python数据分析 作者简介:Python领域新星作者、多项比赛获奖者:AOAIYI首页 😊😊😊如果觉得文章不错或能帮助到你学习,可…...

性能测试流程
性能测试实战一.资源指标分析1.判断CPU是否瓶颈的方法2.判断内存是否瓶颈的方法3.判断磁盘I/O是否瓶颈的方法4.判断网络带宽是否是瓶颈的方法二.系统指标分析三.性能调优四.性能测试案例1.项目背景2.实施规划(1)需求分析(2)测试方…...

zookeeper集群的搭建,菜鸟升级大神必看
一、下载安装zookeeperhttp://archive.apache.org/dist/zookeeper/下载最新版本2.8.1http://archive.apache.org/dist/zookeeper/zookeeper-3.8.1/二、上传安装包到服务器上并且解压,重命名tar -zxvf apache-zookeeper-3.8.1-bin.tar.gzmv apache-zookeeper-3.8.1-b…...

C语言之习题练习集
💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 文章目录牛客网题号: JZ17 打印从1到最大的n位数牛客网题号&#x…...

Buuctf [ACTF新生赛2020]Universe_final_answer 题解
1.程序逻辑 程序逻辑并不复杂: 首先输入字符串,然后对字符串进行一个判断是否满足条件的操作 如果满足则对字符串进行处理并输出,输出的就是flag 2.judge_860函数 显然根据这十个条件可以通过矩阵解线性方程组,这里对变量的命名做了一些调整,让Vi对应flag[i]方便读 …...

【Linux】环境变量
目录背景1.概念2.常见环境变量2.1 PATH指令和自定义程序向环境变量PATH中添加路径删除PATH中的路径2.2 env:显示所有环境变量2.3 环境变量相关的命令3.通过代码获取环境变量1.char* envp[]2.第三方变量enciron3.getenv函数获取指定环境变量4.利用获取的环境变量自制…...

单一职责原则
单一职责原则: 就一个类而言,应该只有一个引起它变化的原因,如果一个类承担的职责过多就等于把这些职责耦合在一起,至少会造成以下两方面的问题: 我们要去修改该类中的一个职责可能会影响到该类的其它职责。这种耦合…...

golangの并发编程(GMP模型)
GMP模型 && channel1. 前言2. GMP模型2.1. 基本概念2.2. 调度器策略2.3. go指令的调度流程2.4. go启动周期的M0和G02.5. GMP可视化2.6. GMP的几种调度场景3. channel3.1. channel的基本使用3.2. 同步器1. 前言 Go中的并发是函数相互独立运行的体现,Gorouti…...

MacBook Pro错误zsh: command not found: brew解决方法
问题描述:本地想安装Jenkins,但是brew指令不存在/我的电脑型号是19款的MacBook Pro(Intel芯片)。解决方法MacBook Pro 重新安装homebrew,用以下命令安装,序列号选择阿里巴巴下载源。/bin/zsh -c "$(cu…...

spring中BeanFactory 和ApplicationContext
在学习spring的高阶内容时,我们有必要先回顾一下spring回顾spring1.什么是springspring是轻量级的,指核心jar包时很小的;非侵入式的一站式框架(数据持久层,web层,核心aop),为了简化企业级开发。核心是IOC&a…...

HC32L17x的LL驱动库之dma
#include "hc32l1xx_ll_dma.h"/// //函 数: //功 能: //输入参数: //输出参数: //说 明: // uint8_t LL_DMA_DeInit(DMA_TypeDef* DMAx, uint32_t Channel) {__IO uint32_t* dmac NULL;dmac &(DMAx->CONFA0);Channel << 4;dmac …...

SSM项目 替换为 SpringBoot
一、运行SSM项目 保证项目改为SpringBoot后运行正常,先保证SSM下运行正常。 项目目录结构 创建数据库,导入sql文件 查看项目中连接数据jar版本,修改对应版本,修改数据库配置信息 配置启动tomcat 运行项目,测试正常…...
RL笔记:动态规划(2): 策略迭代
目录 0. 前言 (4.3) 策略迭代 Example 4.2: Jack’s Car Rental Exercise 4.4 Exercise 4.5 Exercise 4.6 Exercise 4.7 0. 前言 Sutton-book第4章(动态规划)学习笔记。本文是关于其中4.2节(策略迭代)。 (4.3) 策略迭代 基…...

2023软件测试金三银四常见的软件测试面试题-【测试理论篇】
三、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段:需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的SE会把需求文档给我们自己先去了解一到两天这样,之后我们会有一个需求澄清会议, 我…...

蓝桥训练第二周
1 ,泛凯撒加密 内存限制:128 MB时间限制:1.000 S 题目描述 众所周知,在网络安全中分为明文和密文,凯撒加密是将一篇明文中所有的英文字母都向后移动三位(Z的下一位是A),比如a向后…...

详讲函数知识
目录 1. 函数是什么? 2. C语言中函数的分类: 2.1 库函数: 2.2 自定义函数 函数的基本组成: 3. 函数的参数 3.1 实际参数(实参): 3.2 形式参数(形参): …...

gin 框架初始教程文档
一 、gin 入门1. 安装gin :下载并安装 gin包:$ go get -u github.com/gin-gonic/gin2. 将 gin 引入到代码中:import "github.com/gin-gonic/gin"3.初始化项目go mod init gin4.完整代码package mainimport "github.com/gin-go…...

Maven的下载和安装【详细】
文章目录一、什么是Maven?二、Maven的安装与配置2.1下载Maven安装包2.2配置Maven环境变量2.3验证三、Idea配置Maven3.1配置 setting.xml文件3.2Idea配置Maven一、什么是Maven? Apache Maven是个项目管理和自动构建工具,基于项目对象模型&…...

[数据结构]:04-循环队列(数组)(C语言实现)
目录 前言 已完成内容 循环队列实现 01-开发环境 02-文件布局 03-代码 01-主函数 02-头文件 03-QueueCommon.cpp 04-QueueFunction.cpp 结语 前言 此专栏包含408考研数据结构全部内容,除其中使用到C引用外,全为C语言代码。使用C引用主要是为了…...

buu [GWCTF 2019]BabyRSA 1
题目描述: import hashlib import sympy from Crypto.Util.number import *flag GWHT{******} secret ******assert(len(flag) 38)half len(flag) / 2flag1 flag[:half] flag2 flag[half:]secret_num getPrime(1024) * bytes_to_long(secret)p sympy.nextp…...

codeforces 1669F
题意: alice和bob从数组两边的吃糖果, 数组的值就是糖果重量 要求alice和bob吃的糖果重量必须一样, 输出能吃几个糖果 这题最先想到的是前后缀相加 模拟一个前缀和 和 后缀和 在n/2的位置向前找前缀和 在n/2的位置向后找后缀和 找到第一个前缀和后缀和的下标输出就好 …...

高数考试必备知识点
三角函数与反三角函数的知识点 正弦函数 ysin x, 反正弦函数 yarcsin x • y sin x, x∈R, y∈[–1,1],周期为2π,函数图像以 x (π/2) kπ 为对称轴 • y arcsin x, x∈[–1,1]…...

[蓝桥杯] 二分与前缀和习题练习
文章目录 一、二分查找习题练习 1、1 数的范围 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 机器人跳跃问题 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 四平方和 1、3、1 题目描述 1、3、2 题解关键思路与解答 二、前缀和习题练习 2、1 前缀和 2、1、1 题目描述…...

SpringMvc中HandlerAdapter组件的作用
概述 我们在使用springMVC时,都知道其中不仅包含handlerMapping组件还包含handlerAdapter组件,为什么呢? springMVC请求流程图 HandlerAdapter组件使用了适配器模式 适配器模式的本质是接口转换和代码复用,这里使用适配器模式的…...

FreeRTOS优先级翻转
优先级翻转优先级翻转:高优先级的任务反而慢执行,低优先级的任务反而优先执行优先级翻转在抢占式内核中是非常常见的,但是在实时操作系统中是不允许出现优先级翻转的,因为优先级翻转会破坏任务的预期顺序,可能会导致未…...