嵌入式物联网开发(二)如何创建N32G45的Keil工程并实现串口打印
如何创建N32G45的Keil工程并实现串口打印
- 打开Keil IDE, 点击菜单栏Project按钮,选择Create New Project,并在弹出的对话框中选择工程目录,并取一个名字,这里取名bootloader:
- 在弹出的对话框中选择我们的对应的芯片型号: N32G452REL7,之后点击OK:
- 在弹出的"Mannage Run-Time Environment"对话框中,什么都不要选,直接默认点击OK,创建一个空的工程:
- 把下载好的SDK目录中的firmware复制到工程根目录下,同时在根目录创建一个source文件夹,用于管理我们自己的源文件:
- 回到Keil中,在左面的Project面板,按照下图所示,建立Group,用来分类管理源文件,然后把对应的文件添加到Group中,注意main.c是需要我们自己新建并添加,其他文件直接从之前复制的firmware文件夹中找,添加方式:点击Group
最终得到的Goup文件布局如下:
6.点击Keil菜单的Option for target…按钮,设置工程Jlink调试相关的选项,具体参考前一篇文章
7.这时候按F7编译的话,编译器应该会提示,部分头文件找不到,这是因为我们还没有把相关的头文件目录添加到keil中,还是点击菜单栏的Option for target…按钮,在弹出的对话框中选择C/C++,并点击include paths后面的…按钮:
在弹出的对话框中,添加文件目录项,主要是firmware里面文件目录,不知道的话,可看编译报错的是哪个文件,然后在目录中搜索,最终添加的目录如下:
如果后期我们添加了其他源文件和头文件,包括自己的头文件,操作步骤也是一样的。
到这里,我们相关的准备工作就OK了,可以按一下F7按钮进行编译,看看效果,如果不出意外的话,肯定还是出意外了:
不要着急,因为我们的main.c文件是空的,也没有main函数的定义,下面我们就来进入今天的主题:配置一个串口,实现串口打印字符串,在main.c中添加以下代码:
#include <stdio.h>#include "n32g45x.h"
#include "n32g45x_rcc.h"
#include "n32g45x_gpio.h"
#include "n32g45x_usart.h"#define USARTx USART3
#define USARTx_GPIO GPIOC
#define USARTx_CLK RCC_APB1_PERIPH_USART3
#define USARTx_GPIO_CLK RCC_APB2_PERIPH_GPIOC
#define USARTx_TxPin GPIO_PIN_10
#define USARTx_RxPin GPIO_PIN_11#define GPIO_APBxClkCmd RCC_EnableAPB2PeriphClk
#define USART_APBxClkCmd RCC_EnableAPB1PeriphClk/*** @brief Configures the different system clocks.*/
void RCC_Configuration(void)
{/* Enable GPIO clock */GPIO_APBxClkCmd(USARTx_GPIO_CLK | RCC_APB2_PERIPH_AFIO, ENABLE);/* Enable USARTy and USARTz Clock */USART_APBxClkCmd(USARTx_CLK, ENABLE);
}/*** @brief Configures the different GPIO ports.*/
void GPIO_Configuration(void)
{GPIO_InitType GPIO_InitStructure;/* Configure USARTx Tx as alternate function push-pull */GPIO_InitStructure.Pin = USARTx_TxPin;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitPeripheral(USARTx_GPIO, &GPIO_InitStructure);/* Configure USARTx Rx as input floating */GPIO_InitStructure.Pin = USARTx_RxPin;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_InitPeripheral(USARTx_GPIO, &GPIO_InitStructure);/* 请参考7.4.3 USART3 的GPIO重映射 */GPIO_ConfigPinRemap(GPIO_PART_RMP_USART3, ENABLE);
}void Logger_Init(void)
{USART_InitType USART_InitStructure;/* USART3 configuration */USART_InitStructure.BaudRate = 115200;USART_InitStructure.WordLength = USART_WL_8B;USART_InitStructure.StopBits = USART_STPB_1;USART_InitStructure.Parity = USART_PE_NO;USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;/* Configure USARTx */USART_Init(USARTx, &USART_InitStructure);/* Enable the USARTx */USART_Enable(USARTx, ENABLE);
}/* retarget the C library printf function to the USART */
int fputc(int ch, FILE* f)
{USART_SendData(USARTx, (uint8_t)ch);while (USART_GetFlagStatus(USARTx, USART_FLAG_TXDE) == RESET);return (ch);
}/*** @brief Main program*/
int main(void)
{/* System Clocks Configuration */RCC_Configuration();/* Configure the GPIO ports */GPIO_Configuration();/* Init the Logger */Logger_Init();/* Output a message on Hyperterminal using printf function */int i = 0;while (1){printf("USART Printf Example: retarget the C library printf function to the USART, i=%d\n\r", i);i++;}
}
上面的代码,我们配置了串口USART3,并把GPIO PC10,PC11设置为复用功能,并重写了C库的fputc函数,在fputc函数中我们通过USART3打印了一个字符,这样我们就可以调用C库的printf函数来打印任何想要打印的字符了,代码写完之后F7编译一下,应该不会有任何报错和警告了,F8下载到板子上运行。这时候,我们还需要把PC10,PC10,GND连接到一个串口转USB模块如CH340,CP2102上,然后在上位机串口调试软件观察串口的输出。
关于如何把程序烧写到N32G芯片中,可以参考前一篇文章
- 如果不出意外的话,诸君的串口还是没有输出的,莫急莫急,先按下面步骤检查:
(1) 首先仔细检查硬件连接,确保TX,RX,GND连接正确(N32的TX接USB转串口模块的RX,N32的RX接USB转串口的TX)
(2) 在Keil中点击Option for target…按钮,进入Output页面,把Use MicroLIB勾选上(具体缘由,大家自行学习)
(3) 在Jlink设置页面,把Reset and run勾选上,否则Keil只是把程序下载到芯片的Flash中,并没有启动程序
最后需要注意的是关于GPIO复用的设置,由于N32G的部分IO有2种复用功能,复用功能启用后,默认是第一复用功能,比如串口USART3,没有重映射时TX,RX管脚是PB10,PB11,部分重映射时TX,RX管脚是PC10,PC11, 完全映射时TX,RX管脚时PD8, PD9,详情可参考用户手册:
我们可以通过下面的函数来修改映射关系:
/* 请参考7.4.3 USART3 的GPIO重映射 */
GPIO_ConfigPinRemap(GPIO_PART_RMP_USART3, ENABLE); // 部分映射
最后程序跑起来时上位机串口打印的内容如下:
完整工程代码已上传,欢迎点击这里下载,若有疑问或错误,欢迎留言指正。
相关文章:
嵌入式物联网开发(二)如何创建N32G45的Keil工程并实现串口打印
如何创建N32G45的Keil工程并实现串口打印 打开Keil IDE, 点击菜单栏Project按钮,选择Create New Project,并在弹出的对话框中选择工程目录,并取一个名字,这里取名bootloader:在弹出的对话框中选择我们的对应的芯片型号: N32G452R…...
基于Canal+Spring Boot+Kafka的MySQL数据变更实时监听实战指南
前期知识背景 binlog 什么是binlog 它记录了所有的DDL和DML(除 了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL 的二进制日志是事务安全型的。一般来说开启二进制日志大概会有1%的性能损耗。 binlog分类 MySQL Bi…...
Unity入门笔记(缘更)
内容来源SiKi学院的Luna’s Fantasy 文章目录 一、基础知识1.准备2.基础知识1.层级(Layer)2.轴心点3.预制体(Prefab)4.刚体组件(Rigidbody)5.碰撞器组件(BoxCollider) 二、代码1.移动 一、基础知识 1.准备 Unity安装: https://unity.cn 2.基础知识 1.层级(Layer…...
SpringAI+DeepSeek大模型应用开发——2 大模型应用开发架构
目录 2.大模型开发 2.1 模型部署 2.1.1 云服务-开放大模型API 2.1.2 本地部署 搜索模型 运行大模型 2.2 调用大模型 接口说明 提示词角色 编辑 会话记忆问题 2.3 大模型应用开发架构 2.3.1 技术架构 纯Prompt模式 FunctionCalling RAG检索增强 Fine-tuning …...
Prometheus thanos架构
Thanos 是一个用于扩展 Prometheus 的高可用性和长期存储的解决方案。它通过整合多个 Prometheus 实例,提供了全局查询、长期存储、以及高可用性的能力。Thanos 的架构主要由以下几个核心组件组成: 1. Sidecar 功能: Sidecar 是与每个 Prom…...
嵌入式软件--stm32 DAY 1
一、STM32概述 1.ARM内核 ARM是一家英国公司。后被日本软银收购。 RISC(精简指令集计算机) 产品:ARM架构处理器,相关外围组件的电路设计方案。 怎么卖 :知识产权授权 只卖方案不卖具体产品 买了如何用 拿到ARM的方案 设计产…...
【家政平台开发(53)】解锁家政平台高可用秘籍:负载均衡与架构部署
本【家政平台开发】专栏聚焦家政平台从 0 到 1 的全流程打造。从前期需求分析,剖析家政行业现状、挖掘用户需求与梳理功能要点,到系统设计阶段的架构选型、数据库构建,再到开发阶段各模块逐一实现。涵盖移动与 PC 端设计、接口开发及性能优化,测试阶段多维度保障平台质量,…...
Kotlin整数相除精度损失roundToInt
Kotlin整数相除精度损失roundToInt import kotlin.math.roundToIntfun main() {val a 0.0fval delta 0.1ffor (i in 0..10) {val r a i * deltaprintln("float${r} toInt${r.toInt()} (0.5 toInt)${(r 0.5).toInt()} round${Math.round(r)} roundToInt${r.roundToInt…...
RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION函数分析之初始化中的u.ConnSendContext----RPC源代码分析
RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION函数分析之初始化中的u.ConnSendContext 第一部分: 1: kd> kc # 00 RPCRT4!OSF_CCONNECTION::OSF_CCONNECTION 01 RPCRT4!OSF_CASSOCIATION::AllocateCCall 02 RPCRT4!OSF_BINDING_HANDLE::AllocateCCall 03 RPCRT4!OSF…...
visual studio 2022更改项目名称,灾难性故障(异常来自HRESULT)
系列文章目录 文章目录 系列文章目录前言一、具体步骤二、遇到的问题 前言 在visual studio 2022中,有时候遇到一个很大的工程,我们只是想改写工程名称,而又不想重建项目,如何实现呢? 比如将 Visual Studio 中的 Qt 工…...
用 Deepseek 写的uniapp油耗计算器
下面是一个基于 Uniapp 的油耗计算器实现,包含 Vue 组件和页面代码。 1. 创建页面文件 在 pages 目录下创建 fuel-calculator 页面: <!-- pages/fuel-calculator/fuel-calculator.vue --> <template><view class"container"…...
【KWDB创作者计划】_KwDB2.2.0深度实践:从存储引擎到物联网场景的多模数据库实战
简介 本文基于KwDB2.2.0最新版本,通过存储引擎原理、跨模计算实战和物联网场景落地三个维度,结合代码示例与实操案例,系统解析KwDB的分布式多模能力。从零搭建物联网数据平台,探索多模数据融合的创新价值,助你掌握新一…...
linux 学习 2.vim学习指南
vim vim是一款功能及其强大的编辑器,我们需要掌握其基本的操作才能数量的使用他 如果你想要功能更加丰富的vim获得代码补全之类的复杂功能,强烈建议你安装一下vimplus,可以参考这里vimplus 官方教程 建议学习的时候直接跟着教程一步步操作…...
深度学习在自动驾驶车辆车道检测中的应用
引言 自动驾驶技术是人工智能领域的一个前沿方向,而车道检测是实现自动驾驶的关键技术之一。通过识别和跟踪车道线,自动驾驶车辆能够保持在车道内行驶,提高行车安全。本文将详细介绍如何使用深度学习技术进行车道检测,并提供一个…...
深度学习-Torch框架-2
八、自动微分 自动微分模块torch.autograd负责自动计算张量操作的梯度,具有自动求导功能。自动微分模块是构成神经网络训练的必要模块,可以实现网络权重参数的更新,使得反向传播算法的实现变得简单而高效。 1. 基础概念 张量 Torch中一切皆…...
FlinkCDC初始化时报错“IllegalArgumentException: Unexpected input: “异常定位与原理分析
本篇是纯技术文章,是排查线上问题的真实记录。这个异常我在网上没搜到相同案例,所以特此记录下,方便后期回顾。 一、背景 利用FlinkCDC3.0动态监听数据库Schema变更的能力开发了一个生产数据库DDL语句变更审计告警的服务,这两天突然发现服务一直报错,经过4个小时的排查,…...
从代码学习深度学习 - Transformer PyTorch 版
文章目录 前言1. 位置编码(Positional Encoding)2. 多头注意力机制(Multi-Head Attention)3. 前馈网络与残差连接(Position-Wise FFN & AddNorm)3.1 基于位置的前馈网络(PositionWiseFFN)3.2 残差连接和层规范化(AddNorm)4. 编码器(Encoder)4.1 编码器块(Enco…...
多模态大语言模型arxiv论文略读(二十五)
ManipLLM: Embodied Multimodal Large Language Model for Object-Centric Robotic Manipulation ➡️ 论文标题:ManipLLM: Embodied Multimodal Large Language Model for Object-Centric Robotic Manipulation ➡️ 论文作者:Xiaoqi Li, Mingxu Zhang…...
LVS+Keepalived+dns高可用项目架构
一、搭建DNS服务 配置主服务器 1.修改核心配置文件 [rootDNS-master ~]# vim /etc/named.conf options { listen-on port 53 { 192.168.111.107;192.168.111.100; }; directory "/var/named"; }; zone "haha.com" IN { ty…...
C#日志辅助类(Log4Net)实现
一、Log4Net类库安装 在解决方案中项目上右键单击,选择“管理NuGet程序包”,在浏览窗口的搜索框输入log4net进行搜索,安装搜索出的第一项,如下图。 二、辅助类实现(Log4NetHelper) using log4net.Appender; using log4net.Config; using log4net.Layout; using log4net…...
【FFmpeg从入门到精通】第二章-FFmpeg工具使用基础
1 ffmpeg常用命令 ffmpeg在做音视频编解码时非常方便,所以在很多场景下转码使用的是ffmpeg,通过 ffmpeg --help可以看到 ffmpeg 常见的命令大概分为6个部分,具体如下。 ffmpeg信息查询部分公共操作参数部分文件主要操作参数部分视频操作参数…...
论文阅读:2022 ACL TruthfulQA: Measuring How Models Mimic Human Falsehoods
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 TruthfulQA: Measuring How Models Mimic Human Falsehoods https://arxiv.org/pdf/2109.07958 https://www.doubao.com/chat/3130551217163266 https://github.com/sylin…...
基于C++(MFC)实现的文件管理系统
基于 MFC 的文件管理系统 第一章 题目解读与要求分析 1 实习题目 实现一个文件系统。 2 功能要求 界面上显示树形目录结构 a)根节点是“我的电脑” b)“我的电脑”下有几个盘符(C、D、E 等)就有几个子节点,递归…...
selenium 实现模拟登录中的滑块验证功能
用python在做数据采集过程中,经常需要用到模拟登录,经常遇到各种图片、文字甚至短信等验证,如果能通过脚本的方便实现验证,就可以自动帮我更高效地收集数据。Selenium 是一个开源的 Web 自动化测试工具,最初是为网站自…...
Oracle 19c部署之数据库软件安装(二)
在完成了Oracle Linux 9的初始化配置之后,我们准备安装Oracle 19c数据库软件。 Oracle数据库支持两种主要的安装方式:图形化安装和静默安装。这两种方法各有优缺点,选择哪种取决于你的具体需求、环境配置以及个人偏好。 图形化安装 图形化安…...
Paramiko 使用教程
目录 简介安装 Paramiko连接到远程服务器执行远程命令文件传输示例 简介 Paramiko 是一个基于 Python 的 SSH 客户端库,它提供了在网络上安全传输文件和执行远程命令的功能。本教程将介绍 Paramiko 的基本用法,包括连接到远程服务器、执行命令、文件传输…...
从EOF到REOF:如何用旋转经验正交函数提升时空数据分析精度?
目录 1. 基本概念与原理2. 应用场景3. 与传统EOF的区别4. 技术实现5. 其他领域中的“REOF”参考资料 REOF 的输入是多个地区在不同时间的气候数据(如温度或降雨量),它的作用是通过旋转计算找出这些数据中最主要的变化规律,输出则是…...
VS-Code创建Vue3项目
1 创建工程文件 创建一个做工程项目的文件夹 如:h5vue 2 cmd 进入文件 h5vue 3 输入如下命令 npm create vuelatest 也可以输入 npm create vitelatest 4 输入项目名称 项目名称:自已输入 回车 可以按键盘 a (全选) 回车: Playwright…...
JESD204B接收器核心实现和系统级关键细节
目录 1.通道偏移 2.弹性缓冲器的实现 3.接受延迟 4.RX端到端延迟 5.计算端到端延迟 6.实现可重复的延迟 1.通道偏移 JESD204B接收器核心已经过验证,其功能具有高达8个字节的通道到通道偏斜。 2.弹性缓冲器的实现 在JESD204B设备中,接收通道对齐弹性缓冲区是在分布式…...
NLP高频面试题(四十七)——探讨Transformer中的注意力机制:MHA、MQA与GQA
MHA、MQA和GQA基本概念与区别 1. 多头注意力(MHA) 多头注意力(Multi-Head Attention,MHA)通过多个独立的注意力头同时处理信息,每个头有各自的键(Key)、查询(Query)和值(Value)。这种机制允许模型并行关注不同的子空间上下文信息,捕捉复杂的交互关系。然而,MHA…...
k230学习笔记-疑难点(1)
1.出现boot failed with exit code 19: 需要将k230开发板的btoot0拨到ON 2.出现boot failed with exit code 13: 说明k230开发板的固件烧录已经丢失,需要重新烧录 *** 注意重新烧录时需要将btoot0重新拨到OFF,才会弹出加载固件需要的通用串行总线&…...
JavaScript性能优化实战:让你的Web应用飞起来
JavaScript性能优化实战:让你的Web应用飞起来 在前端开发中,JavaScript性能优化是提升用户体验的关键。一个性能良好的应用不仅能吸引用户,还能提高转化率和用户留存率。今天,我们就来深入探讨JavaScript性能优化的实战技巧&…...
金融数据库转型实战读后感
荣幸收到老友太保科技有限公司数智研究院首席专家林春的签名赠书。 这是国内第一本关于OceanBase数据库实际替换过程总结的的实战书。打个比方可以说是从战场上下来分享战斗经验。读后感受颇深。我在这里讲讲我的感受。 第三章中提到的应用改造如何降本。应用改造是国产化替换…...
血脂代谢通路(医学-计算机系统对照方式)
血脂代谢通路(医学-计算机系统对照方式) 整合所有类比,用医学-计算机系统对照的方式完整描述血脂代谢通路,采用分步骤的对照结构: 1. 食物摄入(数据输入层) # 医学术语: 膳食脂肪摄入 → 计算机类比: 原始数据输入 …...
git更新的bug
文章目录 1. 问题2. 分析 1. 问题 拉取了一个项目后遇到了这个问题, nvocation failed Server returned invalid Response. java.lang.RuntimeException: Invocation failed Server returned invalid Response. at git4idea.GitAppUtil.sendXmlRequest(GitAppUtil…...
直流电源基本原理
整流电路 在构建整流电路时,要选择合适参数的二极管 If是二极管能够通过电流的能力,也是最大整流的平均电流。 还要考虑二极管的反向截至电压。 脉动系数电压交流幅值/直流平均电压(越小越好) 三相整流电路优点: …...
Git -> git merge --no-ff 和 git merge的区别
git merge --no-ff <branch> 与 git merge <branch> 的区别 核心区别 git merge <branch>: 默认使用Fast-forward模式(若可行)不创建额外的合并提交记录合并后看不出曾经存在过分支 git merge --no-ff <branch>:强制创建一个…...
名胜古迹传承与保护系统(springboot+ssm+vue+mysql)含运行文档
名胜古迹传承与保护系统(springbootssmvuemysql)含运行文档 名胜古迹传承与保护系统是一个专注于文化遗产保护和管理的综合性平台。系统提供了一系列功能模块,包括名胜古迹管理、古迹预约管理、古迹故事管理、举报信息管理、保护措施管理、古迹讨论、管理员管理、版…...
windows资源管理器左边导航窗格增加2个项,windows10/11有效
下面文档存为.reg文件, Windows Registry Editor Version 5.00; 根 CLSID —— 名称、图标、固定到导航窗格 [HKEY_CURRENT_USER\Software\Classes\CLSID\{C1A3F2D2-BD2D-4D60-82C5-394F01753A5F}] "手机系统" "System.IsPinnedToNamespaceTree&quo…...
【八股文】基于源码聊聊ConcurrentHashmap的设计
版本演进 jdk 1.7中是分段锁的设计,将哈希表划分为多个segment,每个段独立加锁,锁粒度为段级别。 操作需两次哈希,第一次定位段,第二次定位桶内链表。这种实现方式的缺点就是段数量固定,扩容复杂…...
Mysql--基础知识点--93--两阶段提交
1 两阶段提交 以update语句的具体执行过程为例: 具体更新一条记录 UPDATE t_user SET name ‘xiaolin’ WHERE id 1;的流程如下: 1.执行器负责具体执行,会调用存储引擎的接口,通过主键索引树搜索获取 id 1 这一行记录&#…...
数字化招标采购系统怎么让招采协同更高效?
招标采购领域的数智化转型正在引发行业革命性变革。从传统线下模式到全流程电子化,再到当前数智化阶段的超时空协同,行业的演进路径清晰展现了技术与管理的深度融合。郑州信源信息数智化招采系统作为行业标杆,其创新实践为未来协同工作方式的…...
池塘计数(BFS)
题目描述 由于最近的降雨,光头强的田地里的各个地方都积水了,用 NM(1≤N≤100;1≤M≤100)NM(1≤N≤100;1≤M≤100) 的正方形的矩形表示。每个广场都有水 W 或旱地 .。光头强想知道他的田地里形成了多少池塘。池塘是指一组相邻的有…...
《Science》观点解读:AI无法创造真正的智能体(AI Agent)
无论是想要学习人工智能当做主业营收,还是像我一样作为开发工程师但依然要运用这个颠覆开发的时代宠儿,都有必要了解、学习一下人工智能。 近期发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,入行门槛低&#x…...
从零开始学A2A四:A2A 协议的安全性与多模态支持
文章目录 A2A 协议的安全性与多模态支持一、A2A 协议安全机制1. 认证机制2. 授权机制3. 数据加密 二、多模态交互支持1. 文本交互2. 音频支持3. 视频与图像处理4. 复合数据格式 三、安全与多模态最佳实践1. 安全性实践2. 多模态实践 四、与 MCP 的对比1. 安全机制对比2. 多模态…...
一种大位宽加减法器的时序优化
平台:vivado2018.3 芯片:xc7a100tfgg484-2 (active) 在FPGA中实现超高位宽加减法器(如256)时,时序收敛常成为瓶颈。由于进位链(Carry Chain)跨越多级逻辑单元,关键路径延迟会随位宽…...
【专业解读:Semantic Kernel(SK)】大语言模型与传统编程的桥梁
目录 Start:什么是Semantic Kernel? 一、Semantic Kernel的本质:AI时代的操作系统内核 1.1 重新定义LLM的应用边界 1.2 技术定位对比 二、SK框架的六大核心组件与技术实现 2.1 内核(Kernel):智能任务调度中心 2…...
InfiniBand与RoCEv2负载均衡机制的技术梳理与优化实践
AI技术的高速迭代正驱动全球算力格局进入全新纪元。据IDC预测,未来五年中国智能算力规模将以超50%的年复合增长率爆发式扩张,数据中心全面迈入“智能算力时代”。然而,海量AI训练、实时推理等高并发场景对底层网络提出了更严苛的挑战——超大…...
Vue与React组件化设计对比
组件化是现代前端开发的核心思想之一,而Vue和React作为两大主流框架,在组件化设计上既有相似之处,也存在显著差异。本文将从语法设计、数据管理、组件通信、性能优化、生态系统等多个方向,结合实例详细对比两者的特点。 一、模板…...
UE中通过AAIController::MoveTo函数巡逻至目标点后没法正常更新巡逻目标点
敌人巡逻的逻辑如下: 敌人在游戏一开始的时候就通过moveto函数先前往首先设定的patroltarget目标,在距离patroltarget距离为patroradius(200unit)之内时就可以通过checkpatroltarget函数更新新的patroltarget目标,随后前往新的pat…...