FreeRTOS学习笔记(一)—— 裸机和RTOS,Freertos移植(MDK),stm32cubeIDE使用Freertos

news2025/1/10 6:01:49

FreeRTOS学习笔记(一)—— 裸机和RTOS,Freertos移植(MDK),stm32cubeIDE使用Freertos

文章目录

  • `FreeRTOS学习笔记(一)—— 裸机和RTOS,Freertos移植(MDK),stm32cubeIDE使用Freertos`
  • `FreeRTOS学习笔记系列`
    • `开胃小菜(前缀后缀)`
      • 前缀x和v
      • 后缀FromISR
    • `1、裸机与RTOS`
      • `裸机与RTOS的区别`
      • `前后台系统(裸机)`
      • `实时操作系统(RTOS)`
    • `2、FreeRTOS简介`
    • `3、Freertos调度方式`
      • `抢占式——优先级不同的任务`
      • `时间片轮转——优先级相同的任务`
      • `协程式——不更新`
      • `PS:Freertos的四个任务状态`
    • `4、Freertos移植(MDK)`
      • `源码文件夹介绍`
      • `动手移植`
        • `Source文件夹`
        • `portable文件夹`
          • `Keil文件夹`
          • `RVDS文件夹`
          • `MemMang文件夹`
        • `添加 FreeRTOSConfig.h 文件`
          • `FreeRTOSConfig.h获取途径`
        • `移植好了别忘了加路径啊!!!!!!!!`
    • `5、stm32cubeide创建Freertos工程`
      • `RCC模式和配置(根据实际情况)`
      • `系统模式与配置`
      • `FREERTOS模式和配置`
        • `Freertos接口(CMSIS)`
        • `参数配置(Config parameters)`
        • `任务创建(Tasks) 和 消息队列(Queues)`
        • `互斥锁(Mutexes) 和 递归互斥锁(Recursive Mutexes)`
        • `定时器(Timer) 和 信号量(Semaphore)`
        • `事件标志组(Events)`
        • `高级设置(Advanced settings)`
        • `其他设置(others)`
      • `生成位置/效果`
  • `如果对你有帮助,就点赞收藏吧!(。・ω・。)ノ♡`



FreeRTOS学习笔记系列

【FreeRTOS(MDK、STM32CUBEIDE)学习笔记,超详细!!!(合集)】
【FreeRTOS学习笔记(一)—— 裸机和RTOS,Freertos移植(MDK),stm32cubeIDE使用Freertos】
【FreeRTOS学习笔记(二)—— 任务,挂起,临界区,中断,任务调度和切换】
【FreeRTOS学习笔记(三)—— 消息队列,信号量,事件标志组,任务通知】
【FreeRTOS学习笔记(四)—— 延时函数,列表,软件定时器,低功耗模式,内存管理】



开胃小菜(前缀后缀)

前缀x和v

FreeRTOS 的一些函数前缀x,而有一些前缀v,到底是什么意思呢
就比如任务的创建和删除

API函数描述
xTaskCreate()动态方式创建任务
xTaskCreateStatic()静态方式创建任务
vTaskDelete()删除任务

x代表函数返回值为一个BaseType_t类型,用于辨别是否创建成功
v的含义是void,即没有返回值

后缀FromISR

“FromISR” 后缀是在 中断函数 中专用的API函数
在中断服务函数里边需调用FreeRTOS的API函数,必须使用带“FromISR”后缀的函数


1、裸机与RTOS

裸机与RTOS的区别

用两个事情作比喻:打游戏和跟对象聊天
裸机:游戏和对象只能选一个,打游戏怎么能分心呢

在这里插入图片描述

RTOS:小孩子才做选择,我两个都要,边打游戏边聊天
在这里插入图片描述

前后台系统(裸机)

裸机又称为前后台系统,前台系统指的中断服务函数,后台系统指的while()大循环,即应用程序
1、实时性差:(应用程序)轮流执行
2、delay空等待:CPU不执行其他代码
3、结构臃肿:实现功能都放在一个无限循环里面
在这里插入图片描述


实时操作系统(RTOS)

RTOS全称为:Real Time OS,就是实时操作系统,强调的是:实时性
1、分而治之:实现功能划分为多个任务
2、延时函数:任务调度,delay的时候去干别的事,不空等
3、抢占式:高优先级任务抢占低优先级任务
4、任务堆栈:每个任务都有自己的栈空间
在这里插入图片描述


2、FreeRTOS简介

更加详细的介绍可以看往期文章【嵌入式实时操作系统(RT-Thread、FreeRTOS、UCOSIII)】

FreeRTOS 是一个免费的嵌入式实时操作系统

  1. 免费开源:FreeRTOS完全免费且开源,无潜在商业风险,无须担心
  2. 高度可裁剪:其核心代码精炼至约9000行,集中分布在3个.c文件中,方便定制和优化
  3. 使用简便:FreeRTOS的用户界面友好,易于理解和操作。
  4. 优先级无限制:任务优先级分配自由,多个任务共享同一优先级
  5. 无限任务数量:理论上,FreeRTOS支持创建无限数量的实时任务,没有软件限制(但受硬件限制)
  6. 多样化的任务调度:支持抢占式、协程式和时间片轮转等多种任务调度方式

3、Freertos调度方式

抢占式——优先级不同的任务

抢占式调度主要是针对优先级不同的任务
每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。
在这里插入图片描述

时间片轮转——优先级相同的任务

时间片调度主要针对优先级相同的任务
同等优先级任务轮流地享有相同的 CPU 时间, 叫时间片
当多个任务的优先级相同时,任务调度器会在每一次系统时钟节拍到的时候切换任务。

在FreeRTOS中,一个时间片(Freertos不可设置)就等于 SysTick 中断周期(可设置)
一个时间片大小,取决为滴答定时器中断周期
SysTick 中断周期是可以设置的,可以间接更改时间片

在这里插入图片描述
如果Task运行过程中(还不到一个时间片)阻塞了(系统延时或等待信号量等),直接切换到下个Task
注意没有用完的时间片不会再使用

协程式——不更新

协程式调度当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级任务
FreeRTOS部分版本还支持,但是官方已经表示不再更新协程式调度

PS:Freertos的四个任务状态

在STM32中,同一时间仅一个任务处于运行态
仅就绪态可转变成运行态,其他状态的任务想运行,必须先转变成就绪态

在这里插入图片描述
就绪态、阻塞态、挂起态的任务都有其对应的任务状态列表
就绪列表pxReadyTasksLists[x]
阻塞列表pxDelayedTaskList[x]
挂起列表xSuspendedTaskList[x]
x:表示优先级


4、Freertos移植(MDK)

官网直接下载就行:https://www.freertos.org/


源码文件夹介绍

解压压缩包,可以看到一堆文件,文件如下表所示

文件/文件夹描述
FreeRTOSFreeRTOS内核
FreeRTOS-PlusFreeRTOS组件
tools工具
GitHub-FreeRTOS-HomeFreeRTOS的GitHub仓库链接
Quick_Start_Guide快速入门指南官方文档链接
Upgrading-to-FreeRTOS-xxx升级到指定FreeRTOS版本官方文档链接
History.txtFreeRTOS历史更新记录

FreeRTOS-Plus包含了TCP,UDP,MQTT等一些组件,但是这些组件一般用三方
最核心的文件夹内就是FreeRTOS——FreeRTOS内核

文件/文件夹描述
DemoFreeRTOS演示例程
LicenseFreeRTOS相关许可
SourceFreeRTOS源码
Test公用以及移植层测试代码

其中最重要的是Source——FreeRTOS源码

文件/文件夹描述
include内包含了FreeRTOS的头文件
portable内包含了FreeRTOS的移植文件
croutine.c协程相关文件
event_groups.c事件相关文件
list.c列表相关文件
queue.c队列相关文件
stream_buffer.c流式缓冲区相关文件
tasks.c任务相关文件
timers.c软件定时器相关文件

其中必要的有include,portable,list.c,queue.c,tasks.c

FreeRTOS操作系统归根到底是软件层面的
portable文件夹里面的东西就是连接桥梁

portable文件夹里面文件很多
在这里插入图片描述

用MDK编辑器的重要文件如下

名称描述
Keil指向RVDS文件夹
RVDS不同内核芯片的移植文件
MemMang内存管理文件

动手移植

这些文件从哪来?
当然还有其他的文档整理方式
在这里插入图片描述


Source文件夹

Source文件夹——FreeRTOS源码就是要移植的文件
前面所说的9个文件/文件夹,文件就不多说,文件夹再仔细看

文件/文件夹描述
include内包含了FreeRTOS的头文件
portable内包含了FreeRTOS的移植文件
croutine.c协程相关文件
event_groups.c事件相关文件
list.c列表相关文件
queue.c队列相关文件
stream_buffer.c流式缓冲区相关文件
tasks.c任务相关文件
timers.c软件定时器相关文件

portable文件夹

接着,就是我们的链接桥梁 portable——内包含了FreeRTOS的移植文件
前文也讲到了用MDK编辑器的重要文件如下

名称描述
Keil指向RVDS文件夹
RVDS不同内核芯片的移植文件
MemMang内存管理文件

Keil文件夹

里面就只有一个 “See-also-the-RVDS-directory.txt”,所以也没什么用


RVDS文件夹

不同内核芯片的移植文件(链接桥梁)

STM32系列Port文件所在文件夹
STM32F1(ARMCC)RVDS/ARM_CM3
STM32F4/STM32G4(ARMCC)RVDS/ARM_CM4F
STM32F7(ARMCC)RVDS/ARM_CM7/r0p1
STM32H7(ARMCC)RVDS/ARM_CM7/r0p1
STM32H5(ARMClang)GCC/ARM_CM33_NTZ

里面都是这两个文件
在这里插入图片描述


MemMang文件夹

内存管理算法
在这里插入图片描述
一般使用的是 “heap_4.c”

这就是我们常见的这些文件从哪里来
在这里插入图片描述


添加 FreeRTOSConfig.h 文件

FreeRTOSConfig.h 配置文件作用:对FreeRTOS的功能进行配置和裁剪,以及API函数的使能等

FreeRTOSConfig.h 是 FreeRTOS 操作系统的配置文件
FreeRTOS 操作系统是可裁剪的,用户可以根据需求对 FreeRTOS 进行裁剪
裁剪掉不需要用到的 FreeRTOS 功能,节约 MCU中内存资源。

INCLUDE前缀:使能FreeRTOS中所需的API函数
在这里插入图片描述
config前缀:FreeRTOS的功能配置和裁剪
在这里插入图片描述


FreeRTOSConfig.h获取途径

途径1:官方历程里拿来用,在文件FreeRTOS——Demo里(可能不靠谱)
途径2:找个靠谱公司的嵌入式历程移植,比如说正点原子
途径3:自己写,官网内核 > 开发者文档 > FreeRTOSConfig.h > 定制 里面介绍了各个功能

看过 “FreeRTOSConfig.h” 就会知道,其实也并没有多难理解
文章下面有解释每个宏的意义
在这里插入图片描述
在这里插入图片描述


移植好了别忘了加路径啊!!!!!!!!

在这里插入图片描述


5、stm32cubeide创建Freertos工程

RCC模式和配置(根据实际情况)

在这里插入图片描述

系统模式与配置

在这里插入图片描述

烧录/调试选择所需的烧录/调试方式
时钟则采用一个定时器作为时钟信号,如果使用Systick,会报如下警告

在这里插入图片描述


FREERTOS模式和配置


Freertos接口(CMSIS)

没有特殊需求的选择接口2
在这里插入图片描述
PS:CMSIS(Cortex Microcontroller Software Interface Standard)
CMSIS_V1和CMSIS_V2版本主要影响的是底层硬件抽象层的标准接口。
分别被称为CMSIS_CORE和CMSIS 5。

  • CMSIS V1 (CMSIS_CORE)
    这是早期的版本,为Cortex-M处理器提供了一个标准的软件接口
    包括了内核外设访问层(CPAL)、调试和DWT(Data Watchpoint and Trace)等功能。
    它是FreeRTOS和其他RTOS的基础,确保了不同厂商的Cortex-M微控制器能够使用统一的API来访问硬件资源。

  • CMSIS V2 (CMSIS 5)
    这是CMSIS的较新版本,引入了一些新的特性和改进
    针对特定系列的STM32增加了额外组件,提供更多的功能和更好的性能。比如DFPs
    CMSIS 5还改进了调试和跟踪机制,增强了与开发工具的兼容性。

参数配置(Config parameters)

在这里插入图片描述
下面是 参数配置(Config parameters) 各项的意义

配置参数意义默认选项
APIFreeRTOS APIAP接口CMSIS V2
VersionsFreeRTOS versionFreeRTOS版本10.0.1
(版本)CMSIS-RTOS versionCMSIS-RTOS版本2
Kernel settingsUSE_PREEMPTION使能抢占式调度器(Disable: 协程式调度器)Enabled
(内核设置)CPU CLOCK HZCPU主频SystemCoreClock
TICK RATE_HZ系统时钟节拍频率1000
MAX PRIORITIES定义最大优先级数56
MINIMAL STACK SIZE定义空闲任务的栈空间大小128 Words
MAX TASK NAME LEN定义任务名最大字符数16
USE_16_BIT_TICKS定义系统时钟节拍计数器的数据类型为16位无符号数Disabled
IDLE SHOULD YIELD使能在抢占式调度下,同优先级的任务能抢占空闲任务Enabled
USE MUTEXES使能互斥信号量Enabled
USE RECURSIVE MUTEXES使能递归互斥信号量Enabled
USE COUNTING SEMAPHORES使能计数信号量Enabled
QUEUE REGISTRY SIZE定义可以注册的消息量和消息队列的个数8
USE APPLICATION TASK TAG使能启用应用程序任务堆栈监视Disabled
ENABLE BACKWARD COMPATIBILITY使能兼容老版本Enabled
USE PORT OPTIMISED TASK SELECTION使用硬件计算下一个要运行的任务Disabled
USE TICKLESS IDLE使能idleless低功耗模式Disabled
USE TASK NOTIFICATIONS使能任务间直接的消息传递包括信号量、事件标志组和消息邮箱Enabled
RECORD STACK HIGH ADDRESS记录任务堆栈的高地址Disabled
Memory management settingsMemory Allocation内存分配方式(默认动态/静态)Dynamic / Static
(内存管理设置)TOTAL HEAP SIZEFreeRTOS堆中可用的RAM总量3072 Bytes
Memory Management scheme内存管理方案(第4章算法)heap_4
Hook function related definitionsUSE IDLE HOOK使能空闲任务钩子函数Disabled
(钩子函数相关定义)USE TICK HOOK使能系统时钟节拍中断钩子函数Disabled
USE MALLOC FAILED_HOOK使能动态内存申请失败钩子函数Disabled
USE DAEMON TASK STARTUP_HOOK使能定时器服务任务首次执行前的钩子函数Disabled
CHECK FOR STACK OVERFLOW使能栈溢出检测方法Disabled
Run time and task stats gathering related definitionsGENERATE RUN TIME STATS使能任务运行时间统计功能Disabled
(收集相关定义的运行时和任务统计信息)USE TRACE FACILITY使能可视化跟踪调试Enabled
USE STATS FORMATTING FUNCTIONS使能编译统计格式化函数Disabled
Co-routine related definitionsUSE CO ROUTINES启用协程Disabled
(协例程相关定义)MAX CO ROUTINE PRIORITIES定义协程的最大优先级2
Software timer definitionsUSE TIMERS使能软件定时器Enabled
(软件定时器定义)TIMER TASK PRIORITY定义软件定时器任务的优先级2
TIMER QUEUE LENGTH定义软件定时器命令队列的长度10
TIMER TASK STACK DEPTH定义软件定时器任务的栈空间大小10
Interrupt nesting behaviour configurationLIBRARY LOWER INTERRUPT PRIORITY中断最低优先级15
(中断嵌套行为配置)LIBRARY MAX SYSCALL INTERRUPT PRIORITYFreeRTOS可管理的最高中断优先级5

任务创建(Tasks) 和 消息队列(Queues)

任务 和 消息队列的创建,在同一个页面
在这里插入图片描述
队列又称消息队列,是一种常用于任务间通信的数据结构
队列可以在任务与任务间、 中断和任务间传递信息
实现了任务接收来自其他任务或中断的不固定长度的消息,任务能够从队列里面读取消息
当队列中的消息是空时,读取消息的任务将被阻塞,用户还可以指定阻塞的任务时间 xTicksToWait
在这段时间中,如果队列为空,该任务将保持阻塞状态以等待队列数据有效。
在这里插入图片描述

代码生成选项

Default:就是生成正常的函数
在这里插入图片描述

As a external:作为一个外部函数
在这里插入图片描述

As weak:生成弱函数,函数可以被重写
在这里插入图片描述


互斥锁(Mutexes) 和 递归互斥锁(Recursive Mutexes)

递归互斥锁,也称为可重入互斥锁,是一种特殊的互斥锁,允许多次尝试以递归的方式锁定同一资源
普通的互斥锁在同一时间只能被一个线程锁定,且必须在同一线程中解锁相同次数才能实际释放锁
相比之下,递归互斥锁可以被同一个线程多次锁定,只要该线程解锁相同的次数就可以释放锁
这种类型的锁通常用于递归函数中,或者在多个线程可能以未知的顺序锁定和解锁资源的情况下

在这里插入图片描述


定时器(Timer) 和 信号量(Semaphore)

定时器是一种硬件或软件机制,可以生成周期性的中断,用于在特定的时间间隔后触发事件
定时器可以设置为一次性触发模式,也可以设置为周期性重复触发模式。
在多任务操作系统中,定时器还用于确定任务的最大执行时间,从而实现任务的实时调度。
在这里插入图片描述
信号量是一个重要的同步工具,用于控制多个进程对共享资源的访问,以防止数据的损坏。
信号量维护一个计数器,该计数器在进程申请资源时递减,在进程释放资源时递增。
当计数器的值大于零时,意味着有可用资源,进程可以直接使用;
当计数器的值为零时,进程必须等待,直到有其他进程释放资源。


事件标志组(Events)

在这里插入图片描述


高级设置(Advanced settings)

在这里插入图片描述

要是不使能的话,就会报如下警告

在这里插入图片描述


其他设置(others)

FreeRTOS Heap Usage——FreeRTOS堆使用情况——改不了,看得懂的,可以看这些数据

在这里插入图片描述

Include parameters——包括参数——看不懂的不要乱改

在这里插入图片描述


生成位置/效果

参数配置(Config parameters)的一系列定义和使能都在 freertos.h文件
创建的任务,消息队列,互斥锁,定时器,信号量,事件标志组等都在 freertos.c文件
这些线程同步方法的具体用法,官网 FreeRTOS 内核开发者文档 有介绍

在这里插入图片描述
在这里插入图片描述




┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈┈
┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈
┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈
▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈┈

如果对你有帮助,就点赞收藏吧!(。・ω・。)ノ♡

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp/vue个性化单选、复选组件

个性化单选和复选组件在网页设计中非常常见,它们不仅能够提升用户界面的美观度,还能改善用户体验。此组件是使用vue uniapp实现的个性化单选复选组件。设计完成后,点击生成源码即可。 拖动组件过设计区 每行显示数量 默认支持每行三个&#…

Maven-学习首篇

目录 Maven简介基本概念&特点Maven的安装与配置Maven基础概念及使用方法Maven的项目结构Maven的使用Maven的依赖管理Maven的生命周期和插件常见疑问Maven的插件机制是如何工作的?Maven的POM文件主要包含哪些内容?Maven的生命周期包括哪些阶段&#x…

【C++语言】list的构造函数与迭代器

1. list的介绍及使用 1.1 list的介绍 list的文档介绍 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点…

C++中的IO流

目录 1.C语言的输入与输出 2.流是什么 3.CIO流 标准IO流 IO流的四个标志 C文件IO流 4.stringstream的简单介绍 1.C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据,并将值存放在变…

钢铁百科:A572Gr60和SA572Gr60材质分析、A572Gr60和SA572Gr60简介

A572Gr60和SA572Gr60是两种常用的结构钢板,它们在材质、执行标准、化学成分、力学性能、交货状态、应用范围和常用规格方面有所不同。 材质: A572Gr60:属于美国材料与试验协会(ASTM)标准下的A572系列高性能结构钢&…

UIAbility组件基础(一)

一、概述 UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。UIAbility组件是系统调度的基本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。 U…

自研低代码海报制作平台学习分享计划

vue3组件库开发前面咱卷完了JuanTree组件,接下来一起来卷vue3低代码海报制作平台的基础组件实现。首先是拖拽基础组件的开发,整好把前面学习的知识点再运用进来。 文章目录 效果演示基本拖拽区域拖拽旋转其他效果待实现 录屏说明 看一步步实现的效果&…

C++--类和对象(二)

类和对象的基础定义可参看:C--类和对象(一)-CSDN博客 本篇讲述类和对象里相当重要的几个成员函数 目录 类的默认成员函数: 1.构造函数 2.析构函数 3.拷贝构造函数 (1)无限递归调用拷贝构造 &#xff…

在Ubuntu中重装Vscode(没有Edit Configurations(JSON)以及有错误但不标红波浪线怎么办?)

在学习时需要将vscode删除重装,市面上很多方法都不能删干净,删除之后拓展都还在。因此下面的方法可以彻底删除。注意,我安装时使用的是snap方法。 如果你的VScode没有Edit Configurations(JSON),以及有错误但不标红波浪线的话&…

基于QT实现的TCP连接的网络通信(客户端)

上篇介绍了QT实现网络通信的服务器端,还没看服务器的朋友们先去上篇了解,这篇我来实现一下客户端的实现。 首先还是新建一个项目 选择mainwindow类 在通信前将.pro文件的第一行代码中追加network 窗口搭建 在mainwindow.ui中完成一下窗口的搭建 首先在…

序列建模之循环和递归网络 - 双向RNN篇

序言 在序列建模的广阔领域中,循环神经网络( RNN \text{RNN} RNN)以其独特的循环结构,在处理序列数据方面展现出了强大的能力。然而,传统的单向 RNN \text{RNN} RNN在处理某些复杂任务时,如自然语言处理中…

基于51单片机的士出租车计价器proteus仿真

地址:https://pan.baidu.com/s/1-GOrUrYlyGZFfkiiO6i5yg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…

「Unity3D」TextMeshPro-Text(UI)无法拖放到TextMeshPro的属性面板上

继承MonoBehaviour,然后定义public TextMeshPro textPro,属性面板上就会有TextMeshPro的拖放槽(slot),以配置含有TextMeshPro的组件对象(GameObject)。 但此时会发现,含有TextMeshPr…

李沐老师动手深度学习pytorch版本的读取fashion_mnist数据并用AlexNet模型训练,其中修改为利用本地的数据集训练

李沐老师的d2l.load_data_fashion_mnist里面没有root参数,所以只会下载,不能利用本地的fashion_mnist数据。所以我使用torchvision 的datasets里面FashionMNIST方法,又由于李沐老师此处是利用AlexNet模型来训练fashion_mnist数据,…

xiaomi pad 6PRO 小米平板6 pro hyperOS降级 澎湃os 降级MIUI 14 教程 免解锁BL 降级,168小时解锁绑定

小米平板 6 Pro 机型代号 :liuqin 降级MIUI 14 小米澎湃 OS 正式版 澎湃OS安卓发布日期卡刷包线刷包OS1.0.7.0.UMYCNXM14.02024-07-13miui_LIUQIN_OS1.0.7.0.UMYCNXM_d618a5c980_14.0.zipliuqin_images_OS1.0.7.0.UMYCNXM_20240705.0000.00_14.0_cn_8cbf5920be.…

Android14之解决编译libaaudio.so报错问题(二百二十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…

OceanBase内存管理小窍门

本文来自OceanBase热心用户的实践分享。 本文主要是对OceanBase内存管理的实用技巧分享,而并非直接深入OceanBase的代码层面进行阐述。​​​​​​​ 阅读本文章你将了解: 重载运算符new 与malloc在返回值上区别?在ceph 双向链表新用法&am…

[240815] GPT-4o 系统安全卡 | AMD 完成对 Silo AI 的收购,加速 AI 模型在硬件上的开发和部署

目录 GPT-4o 系统安全卡AMD 完成对 Silo AI 的收购,加速 AI 模型在硬件上的开发和部署 GPT-4o 系统安全卡 一、概述 GPT-4o 是一个多模态模型,可以处理文本、音频、图像和视频输入,并生成文本、音频和图像输出。本文概述了 GPT-4o 发布前的…

Azure OpenAI Swagger Validation Failure with APIM

题意:Azure OpenAI Swagger 验证失败与 APIM 问题背景: Im converting the Swagger for Azure OpenAI API Version 2023-07-01-preview from json to yaml 我正在将 Azure OpenAI API 版本 2023-07-01-preview 的 Swagger 从 JSON 转换为 YAML。 My S…

快速排序算法详解及Python实现

目录 引言 快速排序算法步骤 快速排序的Python实现 性能分析 注意事项 引言 快速排序(Quick Sort)是一种高效的排序算法,由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将待排序的数据分割成独立的两部分&…