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

STM32标准库移植RT-Thread nano

STM32标准库移植RT-Thread Nano

哔哩哔哩教程链接:STM32F1标准库移植RT_Thread Nano

移植前的准备

  1. stm32标准库的裸机代码(最好带有点灯和串口)
  2. RT-Thread Nano Pack
  3. 自己的开发板

移植前的说明

本人是在读学生,正在学习阶段,移植过程中,会有疏漏与不足,请有缘看到的读者指出,且敬请谅解,我会积极更改错误之处

移植步骤

在这里插入图片描述

一、打开RT-Thread文档中心作为参考: RT-Thread文档中心

二、keil上安装RT-Thread Nano Pack

1.用Keil IDE内安装RT-Thread Nano Pack(在线安装)
(1)打开Keil,选择Pack Installer ,关闭提示窗口

在这里插入图片描述

(2)打开pack,选择安装(我这里已经安装所以显示Remove)

在这里插入图片描述

2.用离线安装包安装RT-Thread Nano Pack(离线安装)
(1)下载离线包:RT-Thread Nano Pack 离线安装包
(2)离线安装(双击下载好的安装包,进行安装)

在这里插入图片描述
在这里插入图片描述
表示安装完成

三、添加内核源码

在这里插入图片描述
通过以上三个步骤,完成勾选以后,点击OK,就可以完成内核的添加,在keil目录结构中,就能够看到如下所示的内容,表示内核添加成功
在这里插入图片描述

四、删除与逻辑冲突的中断相关的函数

1.打开stm32f10x_it.c 找到相关的中断的函数

在这里插入图片描述

2.对与逻辑冲突的中断的函数,进行注释或删除

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

3.添加systick的中断函数到board.c中
void SysTick_Handler()
{rt_interrupt_enter();rt_tick_increase();rt_interrupt_leave();
}

在这里插入图片描述

五、删除RT-Thread中的部分代码,添加系统的时钟配置

1.注释或删除以下一行代码:
 #error "TODO 1: OS Tick Configuration."

在这里插入图片描述

2.添加时钟配置
SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);

在这里插入图片描述

3.board.c中添加需要的头文件
#include "stm32f10x.h" 
#include "gpio.h"
#include "usart.h"
#include "delay.h"

在这里插入图片描述
通过以上步骤,就完成了在STM32标准库上进行RT-Thread Nano版本的移植,编译一下,0警告0错误
在这里插入图片描述

六、创建任务进行验证

1.在工程的user文件夹下,新建RT-Thread相关的头文件和源文件,并添加到工程中

在这里插入图片描述

2.编写user下的RT-Thread的源文件(我的是RT_Thread_demo.c)
(1)包含头文件
#include "stm32f10x.h" 
#include "RT_Thread_demo.h"
#include <rtthread.h>
#include "delay.h"
#include "gpio.h"
#include "usart.h"

在这里插入图片描述

(2)编写需要用到的宏定义
#define TASK1_PRIO      1                        /* 任务优先级 */
#define TASK1_STK_SIZE  128                       /* 任务堆栈大小 */
static rt_thread_t      Task1_Handler = RT_NULL;  /* 任务句柄 */
void Task1(void *pvParameters);             /* 任务函数 */#define TASK2_PRIO      2                        /* 任务优先级 */
#define TASK2_STK_SIZE  128                       /* 任务堆栈大小 */
static rt_thread_t      Task2_Handler = RT_NULL;  /* 任务句柄 */
void Task2(void *pvParameters);             /* 任务函数 */#define TASK3_PRIO      3                        /* 任务优先级 */
#define TASK3_STK_SIZE  128                       /* 任务堆栈大小 */
static rt_thread_t      Task3_Handler = RT_NULL;  /* 任务句柄 */
void Task3(void *pvParameters);             /* 任务函数 */

在这里插入图片描述

(3) 通过函数创建任务,并在main.c中调用
void RT_Thread_demo(void)
{Task1_Handler = rt_thread_create("Task1_Handler",Task1,RT_NULL,TASK1_STK_SIZE,TASK1_PRIO,20);rt_thread_startup(Task1_Handler);Task2_Handler = rt_thread_create("Task2_Handler",Task2,RT_NULL,TASK2_STK_SIZE,TASK2_PRIO,20);rt_thread_startup(Task2_Handler);Task3_Handler = rt_thread_create("Task3_Handler",Task3,RT_NULL,TASK3_STK_SIZE,TASK3_PRIO,20);rt_thread_startup(Task3_Handler);
}

在这里插入图片描述

(4) 编写任务函数
void Task1(void *parameter)
{while(1){LED1_Toggle;//printf("Task1\r\n");USART_SendString(USART1,(unsigned char*)"Task1\r\n");rt_thread_mdelay(300);}rt_thread_delay(10);
}void Task2(void *parameter)
{while(1){LED2_Toggle;//printf("Task2\r\n");USART_SendString(USART1,(unsigned char*)"Task2\r\n");rt_thread_mdelay(600);		}rt_thread_delay(10);
}void Task3(void *parameter)
{while(1){LED3_Toggle;//printf("Task3\r\n");USART_SendString(USART1,(unsigned char*)"Task3\r\n");rt_thread_mdelay(900);		}rt_thread_delay(10);
}

在这里插入图片描述

(5) 模块初始化

把用到的初始化函数都放在board.c的rt_hw_board_init 中
在这里插入图片描述
在这里插入图片描述

通过以上步骤,已经完成对RT_Thread的移植。接下来调试验证

七、移植rt_kprintf函数

1. 在rtconfig.h中修改部分代码
(1)定义 RT_USING_CONSOLE

在这里插入图片描述

(2)删除或注释 uart_init 中的部分代码并加入usart的初始化函数(board.c中)

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

(3)删除rt_hw_console_output部分代码并修改

在这里插入图片描述
函数修改为:

void rt_hw_console_output(const char *str)
{rt_enter_critical();while(*str != '\0')		{if(*str == '\n'){USART_SendData(RT_kprintf_USARTx,'\r');while(USART_GetFlagStatus(RT_kprintf_USARTx, USART_FLAG_TXE) == RESET);	//等待上一个字节发送完成}USART_SendData(RT_kprintf_USARTx, *str++);								//发送一个字节while(USART_GetFlagStatus(RT_kprintf_USARTx, USART_FLAG_TXE) == RESET);	//等待上一个字节发送完成}rt_exit_critical();
}

在这里插入图片描述

八、finsh组件的移植

1. 添加组件源码

在这里插入图片描述
keil的目录结构中,会出现如下文件
在这里插入图片描述

2. rtconfig.h 中打开 finsh 选项

在这里插入图片描述

3. 修改 finsh_port.c 文件
#include <rthw.h>
#include <rtconfig.h>
#include "stm32f10x.h"
#include "usart.h"#ifndef RT_USING_FINSH
#error Please uncomment the line <#include "finsh_config.h"> in the rtconfig.h 
#endif#ifdef RT_USING_FINSHRT_WEAK char rt_hw_console_getchar(void)
{int ch = -1;//查询方式实现,记得将Usart1初始化中的中断接收配置相关代码注释掉/*等待串口1输入数据*/if( USART_GetFlagStatus( RT_kprintf_USARTx, USART_FLAG_RXNE ) != RESET ){ch = ( int )USART_ReceiveData( RT_kprintf_USARTx );USART_ClearFlag( RT_kprintf_USARTx, USART_FLAG_RXNE );}else{if( USART_GetFlagStatus( RT_kprintf_USARTx, USART_FLAG_ORE ) != RESET ){USART_ClearFlag( RT_kprintf_USARTx, USART_FLAG_ORE );}rt_thread_mdelay( 10 );}return ch;
}#endif /* RT_USING_FINSH */
4. 修改串口的初始化函数
void uart1_init(uint32_t bound)
{GPIO_InitTypeDef GPIO_InitStructure;    //GPIOUSART_InitTypeDef USART_InitStructure;  //USARTNVIC_InitTypeDef NVIC_InitStructure;    //NVICRCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;    //USART1_TXGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;	//复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;	    //USART1_RXGPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		//子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能NVIC_Init(&NVIC_InitStructure);USART_OverSampling8Cmd(USART1,ENABLE);USART_InitStructure.USART_BaudRate = bound;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;USART_InitStructure.USART_Parity = USART_Parity_No;USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//收发模式USART_Init(USART1, &USART_InitStructure);         //初始化串口1USART_Cmd(USART1, ENABLE);                       //使能串口1
}

通过以上步骤,对RT-Thread Nano版本的移植到此结束,希望大家相互学习,相互鼓励!!!!

九、keil调试验证

详细调试步骤,请移步至哔哩哔哩视频教程:STM32F1标准库移植RT_Thread Nano

九、烧录到开发板验证

详细步骤,请移步至哔哩哔哩视频教程:STM32F1标准库移植RT_Thread Nano

相关文章:

STM32标准库移植RT-Thread nano

STM32标准库移植RT-Thread Nano 哔哩哔哩教程链接&#xff1a;STM32F1标准库移植RT_Thread Nano 移植前的准备 stm32标准库的裸机代码&#xff08;最好带有点灯和串口&#xff09;RT-Thread Nano Pack自己的开发板 移植前的说明 本人是在读学生&#xff0c;正在学习阶段&a…...

【C++题解】1055. 求满足条件的整数个数

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1055. 求满足条件的整数个数 类型&#xff1a;简单循环 题目描述&#xff1a; 在 1∼n 中&#xff0c;找出能同时满足用 3 除余 2 &#xff0c;用 5 除余 3 &#xff0c;用 7 除余…...

DeepSeek R1-Zero vs. R1:强化学习推理的技术突破与应用前景

&#x1f4cc; 引言&#xff1a;AI 推理的新时代 近年来&#xff0c;大语言模型&#xff08;LLM&#xff09; 的规模化扩展成为 AI 研究的主流方向。然而&#xff0c;LLM 的扩展是否真的能推动 通用人工智能&#xff08;AGI&#xff09; 的实现&#xff1f;DeepSeek 推出的 R1…...

冲刺蓝桥杯之速通vector!!!!!

文章目录 知识点创建增删查改 习题1习题2习题3习题4&#xff1a;习题5&#xff1a; 知识点 C的STL提供已经封装好的容器vector&#xff0c;也可叫做可变长的数组&#xff0c;vector底层就是自动扩容的顺序表&#xff0c;其中的增删查改已经封装好 创建 const int N30; vecto…...

【视频+图文详解】HTML基础1-html和css介绍、上网原理

图文详解 html介绍 概念&#xff1a;html是超文本标记语言的缩写&#xff0c;其英文全称为HyperText Markup Language&#xff0c;是用来搭建网站结构的语言&#xff0c;比如网页上的文字&#xff0c;按钮&#xff0c;图片&#xff0c;视频等。html的版本分为1.0、2.0、3.0、…...

Deepseek技术浅析(二):大语言模型

DeepSeek 作为一家致力于人工智能技术研发的公司&#xff0c;其大语言模型&#xff08;LLM&#xff09;在架构创新、参数规模扩展以及训练方法优化等方面都达到了行业领先水平。 一、基于 Transformer 架构的创新 1.1 基础架构&#xff1a;Transformer 的回顾 Transformer 架…...

OpenCV 版本不兼容导致的问题

问题和解决方案 今天运行如下代码&#xff0c;发生了意外的错误&#xff0c;代码如下&#xff0c;其中输入的 frame 来自于 OpenCV 开启数据流的读取 """ cap cv2.VideoCapture(RTSP_URL) print("链接视频流完成") while True:ret, frame cap.rea…...

03.04、化栈为队

03.04、化栈为队 1、题目描述 实现一个 MyQueue 类&#xff0c;该类用两个栈来实现一个队列。 2、解题思路 本题要求使用两个栈来实现一个队列。队列遵循先进先出&#xff08;FIFO&#xff09;的原则&#xff0c;而栈遵循后进先出&#xff08;LIFO&#xff09;的原则。因此…...

[Effective C++]条款49-52 内存分配

本文初发于 “天目中云的小站”&#xff0c;同步转载于此。 条款49 : 了解new-handler的行为 条款50 : 了解new和delete的合理替换时机 条款51 : 编写new和delete时需固守常规 条款52 &#xff1a;写了placement new也要写placement delete 条款49-52中详细讲述了定制new和d…...

vue3的路由配置

先找到Layout布局文件&#xff0c;从中找到左侧边栏&#xff0c;找到下述代码 <SidebarItem v-for"route in noHiddenRoutes" :key"route.path" :item"route" :base-path"route.path" />/** *菜单项 <SidebarItem>: *使用…...

基于AnolisOS 8.6安装GmSSL 3.1.1及easy_gmssl库测试国密算法

测试环境 Virtual Box&#xff0c;AnolisOS-8.6-x86_64-minimal.iso&#xff0c;4 vCPU, 8G RAM, 60 vDisk。最小化安装。需联网。 系统环境 关闭防火墙 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld selinux关闭 cat /etc/selinux/co…...

Linux系统:Ubuntu替换镜像源具体方法;

在Linux系统更新下载软件时&#xff0c;如遇因镜像源问题下载失败时&#xff0c;我们就需要替换系统原有镜像源&#xff0c;那么&#xff0c;此时&#xff0c;你是否还在百度四处搜索可以用的镜像源地址&#xff0c;然后反复去测试源地址的正确性呢&#xff0c;下面介绍一个亲测…...

机器人介绍

以下是关于机器人的介绍&#xff1a; 定义 机器人是一种能够自动执行任务的机器系统&#xff0c;它集成了机电、机构学、材料学及仿生学等多个学科技术&#xff0c;可以接受人类指挥&#xff0c;运行预先编排的程序&#xff0c;或根据人工智能技术制定的原则纲领行动&#xf…...

thinkphp6+swoole使用rabbitMq队列

安装think-swoole安装 composer require php-amqplib/php-amqplib,以支持rabbitMq使用安装rabbitMq延迟队列插件 安装 rabbitmq_delayed_message_exchange 插件&#xff0c;按照以下步骤操作&#xff1a; 下载插件&#xff1a;https://github.com/rabbitmq/rabbitmq-delayed-…...

19.Word:小马-校园科技文化节❗【36】

目录 题目​ NO1.2.3 NO4.5.6 NO7.8.9 NO10.11.12索引 题目 NO1.2.3 布局→纸张大小→页边距&#xff1a;上下左右插入→封面&#xff1a;镶边→将文档开头的“黑客技术”文本移入到封面的“标题”控件中&#xff0c;删除其他控件 NO4.5.6 标题→原文原文→标题 正文→手…...

Pandas进行MongoDB数据库CRUD

在数据处理的领域,MongoDB作为一款NoSQL数据库,以其灵活的文档存储结构和高扩展性广泛应用于大规模数据处理场景。Pandas作为Python的核心数据处理库,能够高效处理结构化数据。在MongoDB中,数据以JSON格式存储,这与Pandas的DataFrame结构可以很方便地互相转换。通过这篇教…...

分布式系统相关面试题收集

目录 什么是分布式系统&#xff0c;以及它有哪些主要特性&#xff1f; 分布式系统中如何保证数据的一致性&#xff1f; 解释一下CAP理论&#xff0c;并说明在分布式系统中如何权衡CAP三者&#xff1f; 什么是分布式事务&#xff0c;以及它的实现方式有哪些&#xff1f; 什么是…...

家居EDI:Hom Furniture EDI需求分析

HOM Furniture 是一家成立于1977年的美国家具零售商&#xff0c;总部位于明尼苏达州。公司致力于提供高品质、时尚的家具和家居用品&#xff0c;满足各种家庭和办公需求。HOM Furniture 以广泛的产品线和优质的客户服务在市场上赢得了良好的口碑。公司经营的产品包括卧室、客厅…...

原码、反码、补码以及lowbit运算

原码、反码、补码以及lowbit运算 原码&#xff1a; 可以用来计算正数加减&#xff0c;正数的原码、反码、补码都一样。 第一位为符号位&#xff0c;符号位0为正数&#xff0c;1为负数(32位字符&#xff0c;这里用4位来举例子&#xff0c;后面皆是用4位来举例子&#xff0c;其…...

iOS 集成ffmpeg

前言 本来打算用flutter去实现一个ffmpeg的项目的&#xff0c;不过仔细分析了一下&#xff0c;我后期需要集成OpenGL ES做视频渲染处理&#xff0c;OpenGL ES的使用目前在flutter上面还不是很成熟&#xff0c;所以最后还是选择用原生来开发 ffmpeg集成到iOS工程 iOS对于ffmp…...

DeepSeek的崛起与全球科技市场的震荡

引言 近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术的快速发展不断重塑全球科技格局。 近日&#xff0c;中国初创企业DeepSeek推出了一款据称成本极低且性能强大的AI模型&#xff0c;引发全球市场的剧烈反应。NVIDIA、台积电等半导体和AI科技巨头股价大幅下跌&am…...

selenium定位网页元素

1、概述 在使用 Selenium 进行自动化测试时&#xff0c;定位网页元素是核心功能之一。Selenium 提供了多种定位方法&#xff0c;每种方法都有其适用场景和特点。以下是通过 id、linkText、partialLinkText、name、tagName、xpath、className 和 cssSelector 定位元素的…...

Elasticsearch有哪些应用场景?

Elasticsearch的应用场景非常广泛&#xff0c;以下是一些主要的应用场景&#xff1a; 1.全文搜索&#xff1a; Elasticsearch凭借其强大、可扩展和快速的搜索功能&#xff0c;在全文搜索场景中表现出色。它允许用户以近乎实时的响应执行复杂的查询&#xff0c;常用于大型网站…...

MySQL 基础学习(1):数据类型与操作数据库和数据表

MySQL 基础学习&#xff1a;数据类型与操作数据库和数据表 在这篇博客中&#xff0c;我们将深入学习 MySQL 的基础操作&#xff0c;重点关注数据库和数据表的操作&#xff0c;以及 MySQL 中常见的数据类型。希望本文能帮助你更好地理解和掌握 MySQL 的基本用法。 一、操作数据…...

芯片AI深度实战:基础篇之Ollama

有这么多大模型&#xff0c;怎么本地用&#xff1f; Ollama可以解决这一问题。不依赖GPU&#xff0c;也不需要编程。就可以在CPU上运行自己的大模型。 软件甚至不用安装&#xff0c;直接在ollama官网下载可执行文件即可。 现在最流行的deepseek-r1也可以使用。当然还有我认为最…...

安卓(android)订餐菜单【Android移动开发基础案例教程(第2版)黑马程序员】

一、实验目的&#xff08;如果代码有错漏&#xff0c;可查看源码&#xff09; 1.掌握Activity生命周的每个方法。 2.掌握Activity的创建、配置、启动和关闭。 3.掌握Intent和IntentFilter的使用。 4.掌握Activity之间的跳转方式、任务栈和四种启动模式。 5.掌握在Activity中添加…...

deb安装失败后,无法再安装别的包的解决方案

把package_name换成出安装问题的包 移除该包的安装标记 sudo dpkg --remove --force-remove-reinstreq package_name清理残留文件和配置 sudo apt-get purge package_name...

算法基础学习——二分查找(附带Java模板)

有单调性的数列一定可以使用二分&#xff0c;没有单调性的题目也可能可以使用二分&#xff1b; &#xff08;一&#xff09;整数二分 二分的本质&#xff1a; 在某个整数区间内&#xff0c;存在某种性质使得区间内左半边的数都不满足该性质&#xff1b;而右半边的数都满足该性…...

蓝桥杯例题五

无论你面对多大的困难和挑战&#xff0c;都要保持坚定的信念和积极的态度。相信自己的能力和潜力&#xff0c;努力不懈地追求自己的目标和梦想。不要害怕失败&#xff0c;因为失败是成功的垫脚石。相信自己的选择和决策&#xff0c;不要被他人的意见和批评左右。坚持不懈地努力…...

pyside6-uic form.ui -o ui_form.py 的作用

pyside6-uic form.ui -o ui_form.py 的作用 pyside6-uic form.ui -o ui_form.py 这个命令是用来将 .ui 文件转换为 Python 代码文件的工具。 具体作用&#xff1a; pyside6-uic&#xff1a;这是一个命令行工具&#xff0c;用于将用 Qt Designer 或其他图形界面工具创建的 .ui …...

理解神经网络:Brain.js 背后的核心思想

温馨提示 这篇文章篇幅较长,主要是为后续内容做铺垫和说明。如果你觉得文字太多,可以: 先收藏,等后面文章遇到不懂的地方再回来查阅。直接跳读,重点关注加粗或高亮的部分。放心,这种“文字轰炸”不会常有的,哈哈~ 感谢你的耐心阅读!😊 欢迎来到 brain.js 的学习之旅!…...

工业相机开发操作流程

建议按照如下的流程操作相机(其中有一些步骤是可选的&#xff0c;已经标明)&#xff1a; 一、载入SDK的动态链接库档MVCAMSDK.DLL。可以使用动态或者静 态加载两种方式。 如果使用C/C进行开发&#xff0c;在工程引用 CameraApi.h头文件(位于安装目录的SDK/DEMO/VC/include中)和…...

利用飞书机器人进行 - ArXiv自动化检索推荐

相关作者的Github仓库 ArXivToday-Lark 使用教程 Step1 新建机器人 根据飞书官方机器人使用手册&#xff0c;新建自定义机器人&#xff0c;并记录好webhook地址&#xff0c;后续将在配置文件中更新该地址。 可以先完成到后续步骤之前&#xff0c;后续的步骤与安全相关&…...

SpringCloudGateWay和Sentinel结合做黑白名单来源控制

假设我们的分布式项目&#xff0c;admin是8087&#xff0c;gateway是8088&#xff0c;consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目&#xff0c;那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以&#xff1…...

Win10安装MySQL、Pycharm连接MySQL,Pycharm中运行Django

一、Windows系统mysql相关操作 1、 检查系统是否安装mysql 按住win r &#xff08;调出运行窗口&#xff09; 输入service.msc&#xff0c;点击【确定】 image.png 打开服务列表-检查是否有mysql服务 &#xff08;compmgmt.msc&#xff09; image.png 2、 Windows安装MySQL …...

MR-GDINO: Efficient Open-World Continual Object Detection—— 高效开放世界持续目标检测

这篇文章提出了一种名为MR-GDINO的开放世界持续目标检测方法&#xff0c;旨在解决开放世界检测器在持续学习过程中对已见类别和未见类别的灾难性遗忘问题。文章的主要内容和贡献如下&#xff1a; 问题定义&#xff1a;提出了开放世界持续目标检测任务&#xff0c;要求检测器在持…...

显示当前绑定变量

来自v$sql中的信息 测试两个变量的情况&#xff08;实际可以看6个&#xff0c;可根据需要修改&#xff09; DROP TABLE T1 PURGE; CREATE TABLE T1 AS SELECT A.*,SYSDATE RIQI FROM DBA_USERS A ORDER BY 1;var mc char(3); var id number; exec :mc:SYS; exec :id:50;set li…...

如何将xps文件转换为txt文件?xps转为pdf,pdf转为txt,提取pdf表格并转为txt

文章目录 xps转txt方法一方法二 pdf转txt整页转txt提取pdf表格&#xff0c;并转为txt 总结另外参考XPS文件转换为TXT文件XPS文件转换为PDF文件PDF文件转换为TXT文件提取PDF表格并转为TXT示例代码&#xff08;部分&#xff09; 本文测试代码已上传&#xff0c;路径如下&#xff…...

STM32 PWM驱动舵机

接线图&#xff1a; 这里将信号线连接到了开发板的PA1上 代码配置&#xff1a; 这里的PWM配置与呼吸灯一样&#xff0c;呼吸灯连接的是PA0引脚&#xff0c;输出比较单元用的是OC1通道&#xff0c;这里只需改为OC2通道即可。 完整代码&#xff1a; #include "servo.h&quo…...

「AI学习笔记」深度学习的起源与发展:从神经网络到大数据(二)

深度学习&#xff08;DL&#xff09;是现代人工智能&#xff08;AI&#xff09;的核心之一&#xff0c;但它并不是一夜之间出现的技术。从最初的理论提出到如今的广泛应用&#xff0c;深度学习经历了几乎一个世纪的不断探索与发展。今天&#xff0c;我们一起回顾深度学习的历史…...

专业视角深度解析:DeepSeek的核心优势何在?

杭州深度求索&#xff08;DeepSeek&#xff09;人工智能基础技术研究有限公司&#xff0c;是一家成立于2023年7月的中国人工智能初创企业&#xff0c;总部位于浙江省杭州市。该公司由量化对冲基金幻方量化&#xff08;High-Flyer&#xff09;的联合创始人梁文锋创立&#xff0c…...

科技巨头AI投资引领未来增长

标题&#xff1a;科技巨头AI投资引领未来增长 文章信息摘要&#xff1a; 2024年科技巨头的资本支出远超预期&#xff0c;达到2360亿美元&#xff0c;主要得益于AI基础设施和数据中心建设的加速。预计2025年这一趋势将继续保持强劲增长&#xff0c;资本支出可能突破3000亿美元。…...

【Unity3D】Tilemap俯视角像素游戏案例

目录 一、导入Tilemap 二、导入像素风素材 三、使用Tilemap制作地图 3.1 制作Tile Palette素材库 3.2 制作地图 四、实现A*寻路 五、待完善 一、导入Tilemap Unity 2019.4.0f1 已内置Tilemap 需导入2D Sprite、2D Tilemap Editor、以及一个我没法正常搜出的2D Tilemap…...

Java 知识速记:全面解析 final 关键字

Java 知识速记&#xff1a;全面解析 final 关键字 什么是 final 关键字&#xff1f; final 关键字是 Java 中的一个修饰符。它可以用于类、方法和变量&#xff0c;其作用是限制对这些元素的修改。究竟如何限制&#xff1f;我们来逐个分析。 final 在变量中的用法 1. 声明常…...

《智能家居“孤岛危机”:设备孤立如何拖垮系统优化后腿》

在科技飞速发展的今天&#xff0c;智能家居不再是遥不可及的概念&#xff0c;它正逐渐走进千家万户&#xff0c;为我们描绘出舒适便捷的未来生活蓝图。想象一下&#xff0c;下班回家前&#xff0c;你可以通过手机远程开启空调&#xff0c;让室内温度恰到好处&#xff1b;到家时…...

大数据学习之Kafka消息队列、Spark分布式计算框架一

Kafka消息队列 章节一.kafka入门 4.kafka入门_消息队列两种模式 5.kafka入门_架构相关名词 Kafka 入门 _ 架构相关名词 事件 记录了世界或您的业务中 “ 发生了某事 ” 的事实。在文档中 也称为记录或消息。当您向 Kafka 读取或写入数据时&#xff0c;您以事件的 形式执行…...

Linux《基础指令》

在之前的Linux《Linux简介与环境的搭建》当中我们已经初步了解了Linux的由来和如何搭建Linux环境&#xff0c;那么接下来在本篇当中我们就要来学习Linux的基础指令。在此我们的学习是包括两个部分&#xff0c;即指令和关于Linux的基础知识&#xff1b;因此本篇指令和基础知识的…...

Avalonia+ReactiveUI跨平台路由:打造丝滑UI交互的奇幻冒险

一、引言 在当今数字化时代&#xff0c;跨平台应用开发已成为大势所趋。开发者们迫切需要一种高效、灵活的方式&#xff0c;能够让应用程序在不同操作系统上无缝运行&#xff0c;为用户提供一致的体验。Avalonia 和 ReactiveUI 的组合&#xff0c;宛如一对天作之合的舞者&…...

Ansible自动化运维实战--通过role远程部署nginx并配置(8/8)

文章目录 1、准备工作2、创建角色结构3、编写任务4、准备配置文件&#xff08;金甲模板&#xff09;5、编写变量6、编写处理程序7、编写剧本8、执行剧本Playbook9、验证-游览器访问每台主机的nginx页面 在 Ansible 中&#xff0c;使用角色&#xff08;Role&#xff09;来远程部…...

H264原始码流格式分析

1.H264码流结构组成 H.264裸码流&#xff08;Raw Bitstream&#xff09;数据主要由一系列的NALU&#xff08;网络抽象层单元&#xff09;组成。每个NALU包含一个NAL头和一个RBSP&#xff08;原始字节序列载荷&#xff09;。 1.1 H.264码流层次 H.264码流的结构可以分为两个层…...