【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制
【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制
- 一,文档简介
- 二,PWM+TRGMUX+PDB+ADC 2ch 软件配置与实现
- 2.1 软硬件版本平台
- 2.2 MCAL工程以及模块配置
- 2.2.1 Dio 模块配置
- 2.2.2 Adc模块配置
- 2.2.3 Mcu模块配置
- 2.2.4 Platform模块配置
- 2.2.5 Port模块配置
- 2.2.6 Pwm模块配置
- 2.2.7 Uart模块配置
- 2.3主程序调用情况
- 三, 测试结果
一,文档简介
S32M2XX系列是专门为电机控制而生的MCU系列:
S32M24X,延续S32K14X系列MCU,添加了AE预驱模块。
S32M27X,延续了S32K3系列MCU,添加了AE预驱模块。
NXP官方提供了S32M24X和S32M27X系列的EVB,可以配合一个三相PMSM/BLDC电机,实现单电阻电流采样方式的电机控制。研究电机控制的必经之路是要懂得怎么去控制PWM,实现在特定时刻采集电流,电压信号,并且经过计算再回调PWM控制。本文将基于S32M24X-EVB:
https://www.nxp.com/design/design-center/development-boards-and-designs/S32M24XEVB
讲解如何实现在S32M244上,输出带有死区的互补PWM,并且使用FTM_INT作为触发信号,通过PDB延迟触发ADC采样,将ADC采集的值通过UART打印到PC串口,另外通过TRGMUX模块实现不同模块的相互连接,比如FTM和PDB,还有将信号通过TRGMUX_OUT引脚输出。实现的框图结构如下:PWM+TRGMUX+PDB+ADC 双通道。本文主要是使用MCAL的方式实现功能。
本人做的两个配套MCAL附件代码:
S32DSMCAL: Mcal_PWMPDBADC_S32M244_RTD200P04.zip
GCCMCAL: PWMPDBADC_TS_T40D2M20I0R0_kerry.zip
GCCMCAL,是使用ARM GCC makefile方式直接编译,可以参考工具篇的vscode方式去编译生成elf文件去烧录。
S32DSMCAL,是将EB MCAL工程集成到S32DS的工程中去的方式。
本文的主要目的是分享小编自己做的S32M244 MCAL PWM PDB ADC demo,因为目前还没有直接的对应的集成的M244 MCAL demo,如果熟悉电机控制的,也可以直接参考官方S32M244电机控制LLD demo自行去做,但是目前M244电机控制还没有MCAL demo。
二,PWM+TRGMUX+PDB+ADC 2ch 软件配置与实现
2.1 软硬件版本平台
硬件:S32M244-EVB
软件:
- S32DS : S32DS.3.5_b220726_win32.x86_64.exe
- Update 4 for S32DS:SW32_S32DS_3.5.4_D2307.zip
- Development package for S32K1XX: SW32K1_S32DS_3.5.4_D2307.zip
- Development package for S32M2XX: SW32M2xx_S32DS_3.5.0_D2303.zip
- RTD:
S32K1_S32M24X Real Time Drivers AUTOSAR 4.4 & R21-11 Version 2.0.0
S32K1_S32M24X Real Time Drivers AUTOSAR R21-11 Version 2.0.0 P04 - S32M24x_AMMCLIB_RTM_1_1_39_BIN
- S32M24XEVB Evaluation Board Motor Control Application Software :
S32M24XEVB-SW.exe - FreeMASTER tool 3.2 : FMASTERSW32.exe
- VSCode
- EB tresos studio 29.0
这里的软件平台是能够让电机demo都运行起来的这个平台, 如果不需要电机,只需要装S32DS, update,development,RTD,EB即可, VScode取决于个人工具使用习惯,酌情安装。
具体的软件链接,建议直接到官网对应软件下载的地方去搜索下载对应版本即可。
2.2 MCAL工程以及模块配置
本文对应了两种类型的MCAL 工程:
(1)直接在SW32K1_S32M24x_RTD_R21-11_2.0.0_P04现有的MCAL工程,拷贝一个,然后修改EB MCAL的配置,并且添加代码到main,通过makefile方式去编译生成elf,然后再去烧录elf的方式。
(2)新建S32DS工程,然后集成SW32K1_S32M24x_RTD_R21-11_2.0.0_P04驱动,以及EB生成的代码,再添加main代码,这种方式就可以直接在S32DS里面编译,并且烧录的方式。
关于两种方式的编译以及构建,小编有其他对应的工具篇文章详细讲解,自行查阅。
S32K3 工具篇6:如何将RTD EB工程导入到S32DS
S32K3 工具篇7:如何使用VScode编译EB MCAL工程
S32K3 工具篇8:如何移植RTD MCAL现有demo到其他K3芯片
对于EB工程,本例程使用到的相关模块如下:
BaseNXP, Dem, EcuC 模块属于基础模块,没有特别需要配置的,下面对重点模块具体讲解:
2.2.1 Dio 模块配置
Dio主要用到PTE15作为LED引脚,对于PTE15,Port_Id=4, Dio Channel Id=15.
Port_Id, A=0, B=1,C=2,D=3,E=4…,Dio Channel Id是对应port中的引脚号。
2.2.2 Adc模块配置
Adc模块需要做ADC模块的配置,比如传输类型,分频系数,校准分频系数,转换分辨率,PDB硬件模块配置情况,ADC通道,ADC group,group里面要配置引脚触发源,通道延迟情况等,具体相关配置如下:
(1)AdcHwUnit
AdcHwUnit_0->General
主要几点,12位分辨率,然后PDB周期是8000,因为PDB用的是系统时钟80Mhz,所以是10K周期的PDB counter。
AdcHwUnit_0->AdcChannel
AdcChannel定义了两个通道,分别为SE11_ADCH11外部连接板载的可调电位器,还有一个是BANDGAP_ADCH27,是内部的bandgap 1V。
AdcHwUnit_0->AdcGroup
AdcGroup里面需要配置多个地方:
AdcHwUnit_0->AdcGroup0->General: 转换模式,触发模式,采样时间等。
AdcHwUnit_0->AdcGroup0->AdcChannelDelay:定义两个通道PDB触发延迟的时间,必须要满足单通道能够转换完的时间,否则会造成PDB错误。
AdcHwUnit_0->AdcGroup0->AdcGroupDefinition:定义group对应的通道情况
(2) AdcHwTrigger
(3) AdcInterrupt
2.2.3 Mcu模块配置
Mcu模块主要用于配置MCU的相关时钟McuClockSettingConfig,工作模式McuModeSettingConf.
McuClockSettingConfig时钟配置选项较多,不一一展开,可以参考附件代码。
这里需要注意下McuclockReferencePoint
这里涉及到FTM,ADC, PDB, UART模块的时钟参考源情况。
2.2.4 Platform模块配置
Platform配置主要是Interrupt controller的配置:
添加对应模块的中断号和中断Handler。
2.2.5 Port模块配置
Port中配置了使用到的引脚端口,主要是PortContainer的配置,当前配置情况如下:
2.2.6 Pwm模块配置
Pwm模块配置有两个点:
(1)PwmChannel
(2) PwmFtm
PwmFtm_0->Ftm Modules
这里配置了边沿对齐模式,死区的时间为0.5us。
PwmFtm_0->Ftm Sync
PwmFtm_0->PwmFtmCh
配置为Combined Mode,互补输出,FTM0通道0和1.
2.2.7 Uart模块配置
Uart->UartChannel
2.3主程序调用情况
配置完成之后,可以通过在main中调用如下代码实现PWM触发PDB采集ADC双通道的情况,PWM可以输出互补信号,并且还可以实现相关的触发信号通过TRGMUX_OUT引脚输出:
#ifdef __cplusplus
extern "C" {
#endif#include "Mcu.h"
#include "Port.h"
#include "Dio.h"
#include "Pwm.h"
#include "Platform.h"
#include "Adc.h"
#include "Mcl.h"
#include "Lpuart_Uart_Ip_Irq.h"
#include "CDD_Uart.h"
#include <string.h>
#include "stdio.h"
#include "retarget.h"
#include "check_example.h"#define RESULT_ADC_BANDGAP (1241U) /* Vbandgap ~ 1.0V at 3.3V reference */
#define NUM_RESULTS (4u)volatile uint32 VarNotification_0 = 0;
volatile uint32 pdberrcnt = 0;extern ISR(Adc_0_Isr);Adc_ValueGroupType ResultBuffer[NUM_RESULTS] = {0xaaaa, 0xaaaa,0xaaaa, 0xaaaa};
/* Used for ReadGroup */
Adc_ValueGroupType AdcReadGroupBuffer[NUM_RESULTS] = {0xbbbb, 0xbbbb,0xbbbb, 0xbbbb};//UART
#define UART_LPUART_INTERNAL_CHANNEL 0U
#define WELCOME_MSG "Helloworld for automotive with S32M244!\r\n"
#define MSG_LEN 50Uvoid AdcNotification(void)
{VarNotification_0++;
}
void PDB_ADC_SEQ_ERR_NOTIFICATION()
{pdberrcnt ++;
}void TestDelay(uint32 delay);
void TestDelay(uint32 delay)
{static volatile uint32 DelayTimer = 0;while(DelayTimer<delay){DelayTimer++;}DelayTimer=0;
}int main(void)
{uint8 count = 0U;Std_ReturnType StdReturn = E_NOT_OK;volatile boolean bStatus = TRUE;Adc_CalibrationStatusType CalibStatus;volatile Std_ReturnType T_Uart_Status1;/* Initialize the Mcu driver */
#if (MCU_PRECOMPILE_SUPPORT == STD_ON)Mcu_Init(NULL_PTR);
#elif (MCU_PRECOMPILE_SUPPORT == STD_OFF)Mcu_Init(&Mcu_Config_VS_0);
#endif /* (MCU_PRECOMPILE_SUPPORT == STD_ON) *//* Initialize the clock tree and apply PLL as system clock */Mcu_InitClock(McuClockSettingConfig_0);
#if (MCU_NO_PLL == STD_OFF)while ( MCU_PLL_LOCKED != Mcu_GetPllStatus() ){/* Busy wait until the System PLL is locked */}Mcu_DistributePllClock();
#endifMcu_SetMode(McuModeSettingConf_0);/* Initialize all pins using the Port driver */Port_Init(NULL_PTR);Platform_Init(NULL_PTR);Platform_InstallIrqHandler(LPUART0_RxTx_IRQn, LPUART_UART_IP_0_IRQHandler, NULL_PTR);Pwm_Init(&Pwm_Config_VS_0);Mcl_Init(&Mcl_Config_VS_0);Adc_Init(&Adc_Config_VS_0);Uart_Init(NULL_PTR);/* Part 1: Example with SW Triggered One-Shot Conversion Mode, data conversion is updated by Interrupt.*//*******************************************************************************************************/Adc_Calibrate(AdcHwUnit_0, &CalibStatus);if(CalibStatus.AdcUnitSelfTestStatus == E_NOT_OK){bStatus = FALSE;}/* ResultBuffer is updated new data in Adc_0_Isr handler */Adc_SetupResultBuffer(AdcGroup_0, ResultBuffer);Adc_EnableGroupNotification(AdcGroup_0);//for ADC hardwareAdc_EnableHardwareTrigger(AdcHwUnit_0);Adc_StartGroupConversion(AdcHwUnit_0);printf("S32M244 FTM TRIGMUX ADC demo RTD200P04!\r\n");while (1){printf("===========New Round ADC sampling=========\r\n");/* Get input level of channels */Dio_WriteChannel(DioConf_DioChannel_DioChannel_LEDD20, STD_HIGH);TestDelay(2000000);TestDelay(2000000);Pwm_SetDutyCycle(PwmChannel_0, 0x2000);Dio_WriteChannel(DioConf_DioChannel_DioChannel_LEDD20, STD_LOW);TestDelay(2000000);TestDelay(2000000);Pwm_SetDutyCycle(PwmChannel_0, 0x6000);VarNotification_0 = 0;while(VarNotification_0 == 0){}StdReturn = Adc_ReadGroup(AdcGroup_0, AdcReadGroupBuffer);printf("adc1_SE11 = %d \r\n",(int)AdcReadGroupBuffer[0]);printf("adc1_bandGap = %d \r\n",(int)AdcReadGroupBuffer[1]);}Exit_Example(TRUE);return (0U);
}#ifdef __cplusplus
}
#endif
三, 测试结果
测试结果包括两部分:打印结果看ADC采样值情况,以及PWM输出和PDB触发位置的关系情况。打印结果如下,可以看到ADC的两个通道的值是正确的:
PWM波形测试情况如下:
CH1: PTC0
CH2: PTC1
CH3: PTD0
CH4: PTD1
CH5: PTE11
源码链接:
https://community.nxp.com/t5/S32M-Knowledge-Base/RTD200P04-MCAL-S32M244-PWM-PDB-ADC-MCAL-demo/ta-p/2076988
相关文章:
【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制
【RTD200P04 MCAL 篇3】 S32M244 PWM PDB ADC控制 一,文档简介二,PWMTRGMUXPDBADC 2ch 软件配置与实现2.1 软硬件版本平台2.2 MCAL工程以及模块配置2.2.1 Dio 模块配置2.2.2 Adc模块配置2.2.3 Mcu模块配置2.2.4 Platform模块配置2.2.5 Port模块配置2.2.6…...
03--Deepseek服务器部署与cjson解析
一、ollama部署deepseek模型 1、Ollama 是一个开源的本地大语言模型运行框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。 Ollama 教程:从 0 到 1 全面指南 教程【全文两万字保姆级详细讲解】 -CSDN博客 1.下载o…...
实现抗隐私泄漏的AI人工智能推理
目录 什么是私人AI? 什么是可信执行环境? TEE 如何在 AI 推理期间保护数据? 使用 TEE 是否存在风险? 有哪些风险? Atoma 如何应对这些风险 为什么去中心化网络是解决方案 人工智能推理过程中还有其他保护隐私的方法吗? 私人人工智能可以实现什么? 隐私驱动的应…...
Kotlin 学习--数组
一、关于数组的基础知识和常用方式 /*** kotlin 数组* 使用arrayOf创建数组,必须指定数组的元素,可以是任意类型* */val arrayNumber arrayOf(1, 2, 3, 4)/*** 集合中的元素可以是任意类型* kotlin 中的Any 等价于 java 中的Object 对象的意思* */val a…...
Spring Boot 启动后自动执行 Service 方法终极指南
**导语:**在 Spring Boot 开发中,我们经常需要在应用启动后立即执行初始化任务(如加载配置、预热缓存、启动定时任务)。本文将深度解析 5 种主流实现方案,包含完整代码示例、执行顺序控制技巧和避坑指南&a…...
STM32 HAL库之GPIO示例代码
LED灯不断闪烁 GPIO初始化,main文件中的 MX_GPIO_Init(); 也就是在 gpio.c文件中 void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0};/* GPIO Ports Clock Enable */__HAL_RCC_GPIOE_CLK_ENABLE();__HAL_RCC_GPIOC_CLK_ENABLE();__HAL_RCC_GPIOA_C…...
中间件-消息队列
SpringAMQP 任何语言只要遵循AMAP协议,都可以与RabbitMQ交互 生产者、队列、交换机、消费者 生产者Publisher:生产消息,发给交换机 交换机Exchange:接收生产者发送的消息。知道如何处理消息,例如递交给某个特别队列、…...
go游戏后端开发32:自摸杠处理逻辑
当我们在自摸杠时,实际上在杠完之后,我们还需要进行一个删除操作。因此,我们需要在上面拷贝一个删除操作。由于这是自摸杠,所以这个地方需要删除四次。在这里,我们需要注意的是,自摸杠时,传过来…...
AI创业风向标:构建下一代「AI叙事创作平台」
随着技术的进步和市场需求的爆发,AI故事叙述平台正成为投资者和创业者关注的焦点。本文将探讨为何这一赛道值得关注,并提供一些关于如何构建成功的AI叙事创作平台的战略建议。 一、为什么这是2025年值得关注的赛道? 1. 底层需求的爆发 人类永恒的故事需求:全球每月有超过…...
拜特科技签约惠生工程,携手打造高效资金管理系统
近日,拜特科技成功签约惠生工程(中国)有限公司(以下简称“惠生工程”)资金管理系统项目。此次双方携手打造一套先进的资金管理系统,为惠生工程的战略发展注入强劲新动力,推动其资金管理迈向更高水平。 惠生工程作为行…...
快瞳宠物肢体关键点检测:让宠物设备更懂“猫言狗语”
在宠物经济高速发展的今天,智能设备已渗透到养宠生活的方方面面。然而,如何让设备真正理解宠物的行为意图?快瞳科技推出的宠物肢体关键点检测技术,通过精准捕捉宠物肢体动作,为智能喂食、健康监测、行为训练等场景提供…...
【安卓】APP生成器v1.0,生成属于你的专属应用
今天作者给大家分享一个超级好用的手机APP。还在为反复搜索常用网站抓狂?今天安利一款颠覆性神器——它能将你所有心头好的网页变成专属按钮,像搭乐高一样DIY你的「软件」,从此告别收藏夹混乱!小说党、资讯控、摸鱼达人集体狂喜&a…...
详细解读react框架中的hooks
React Hooks 是 React 16.8 引入的一项革命性特性,它允许你在函数组件中使用状态(state)和其他 React 特性,而无需编写 class 组件。下面将详细解读 React Hooks 的核心概念、常用 Hooks 及其工作原理。 一、Hooks 的核心概念 1. 什么是 Hooks Hooks …...
机器学习01-支持向量机(SVM)(未完)
参考浙大 胡浩基老师 的课以及以下链接: https://blog.csdn.net/m0_74100344/article/details/139560508 https://blog.csdn.net/2301_78630677/article/details/132657023 https://blog.csdn.net/lsb2002/article/details/131338700 一、一些定义 T是倒置&…...
Java进阶版线程池(超详细 )
线程池 线程池工具类 Executors Executors 是 Java 提供的一个工具类,它包含了多个静态方法,能够方便地创建不同类型的线程池。 newFixedThreadPool 创建一个固定大小的线程池,线程池中的线程数量固定,当有新任务提…...
场外期权只适合上涨行情吗?
场外期权与直接进行期货市场操作相比,场外期权让我们有了更多的选择空间。”目前期权市场有了更多合适的风险管理模式,场外期权衍生品工具与其需求不谋而合,适合做以小博大,做各种对冲大盘下跌风险等等策略,下文为大家…...
echarts图表相关
echarts图表相关 echarts官网折线图实际开发场景一: echarts官网 echarts官网 折线图 实际开发场景一: 只有一条折线,一半实线,一半虚线。 option {tooltip: {trigger: "axis",formatter: (params: any) > {const …...
【操作系统(Linux)】——多线程对共享变量访问的同步与互斥
一、多线程对共享变量的非互斥访问 我们将要做的:构造多线程共享变量竞争的案例,并分析现象发生的原因,进而思考解决方式。 案例源代码: #include <stdio.h> #include <stdlib.h> #include <pthread.h> #inc…...
deeplabv3+街景图片语义分割,无需训练模型,看不懂也没有影响,直接使用,cityscapes数据集_16
目录 1、下载链接1.1、CSDN链接,含权重文件直接使用,建议直接下这个,还不限速。1.2 Github链接: 2、下载代码,下载预训练好的权重3、预测代码4、像素提取,或者说类别提取5、文档部分内容截图6、其他数据处理…...
[前端]从人体结构看网页三要素:HTML、CSS 与 JavaScript
目录 一、HTML:网页的 “骨架” 二、CSS:网页的 “血肉” 三、JavaScript:网页的 “神经系统” 四、三者协同构建精彩网页 在互联网的浩瀚海洋中,网页是我们与世界交互的重要窗口。一个精彩的网页背后,离不开 HTML、CSS 和 JavaScript 这三位 “幕后英雄”。有趣的是,…...
【Leetcode】3375. 使数组的值全部为 K 的最少操作次数
文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个整数数组 nums 和一个整数 k 。 如果一个数组中所有 严格大于 h 的整数值都 相等 ,那么我们称整数 h 是 合法的 。 比方说,如果 nums [10, 8, 10…...
封装uniapp request promise化
uniapp request 封装 一、 封装方法1. 使用 promis 封装 request2. 封装 api 在 api.js3.在要请求的页面 调用 api 一、 封装方法 1. 使用 promis 封装 request const BASE_URL 你的url接口 //比如 http://198.12.3.3/pzexport function request(config {}){let {url,dat…...
架构演进成熟度校验体系构建
架构演进成熟度校验体系构建 ——基于电商价格服务Checklist的图形化实践指南 一、成熟度校验全景视图 #mermaid-svg-tXchQ6nY7QzNUrL1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tXchQ6nY7QzNUrL1 .error-ico…...
Llama 4全面评测:官方数据亮眼,社区测试显不足之处
引言 2025年4月,Meta正式发布了全新的Llama 4系列模型,这标志着Llama生态系统进入了一个全新的时代。Llama 4不仅是Meta首个原生多模态模型,还采用了混合专家(MoE)架构,并提供了前所未有的上下文长度支持。本文将详细介绍Llama 4…...
kotlin 多个fragment beginTransaction容器添加使用
在Kotlin中如何使用Fragment的beginTransaction来添加多个Fragment到容器中。我需要先回顾一下Fragment的基本用法,然后考虑多个Fragment的情况。 FragmentTransaction的beginTransaction是用来开启一个事务,然后添加、替换或移除Fragment。通常&#x…...
(PTA) L2-011-L2-015
L2-012 关于堆的判断 由于没有得到AC代码(1,3测试点错误),这里先不做展示,等后续复盘的时候进行补充。 L2-011 玩转二叉树 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序…...
管理Linux服务器的用户和组
用户/组 命令符会展示当前用户名和主机名 创建用户,同时创建同名组 useradd 用户名 设置密码 passwd 用户名 切换用户登录 su 用户名 删除用户 userdel -r 用户名 记录用户信息的文件 /etc/passwd 记录密码(密文)信息的文件 /etc/sh…...
奇安信驻场面试题
《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...
Testbench设计
一、几个名词: 被仿真的文件叫DUT(Design under Test) 编写Testbench的目的 验证设计有没问题。 怎么写Testbench? 四、Teshbench各个部分的写法: 外部信号就是外面连接的信号。...
使用IPython有哪些好处?
这里总结了50个使用IPython的好处,大大提升开发效率! 什么是IPython?可能很多人已经在用,却不知道它到底是什么。 根据维基百科的解释: IPython是一种基于Python的交互式解释器,提供了强大的编辑和交互功能…...
加油站小程序实战教程10开通会员
目录 1 修改用户登录逻辑2 创建变量3 调用API总结 我们上一篇搭建了开通会员的界面,有了界面的时候就需要加入一些逻辑来控制界面显示。我们的逻辑是当用户打开我的页面的时候,在页面加载完毕后调用API看用户是否已经开通会员了,如果未开通就…...
NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)
路径类dp是线性dp的⼀种,它是在⼀个nm的矩阵中设置⼀个⾏⾛规则,研究从起点⾛到终点的⽅案数、最⼩路径和或者最⼤路径和等等的问题 矩阵的最小路径和_牛客题霸_牛客网 状态表⽰: dp[i][j]表⽰:到达[i, j]位置处,最⼩…...
WHAT - React 技术栈常用库/工具
目录 基础类状态管理路由管理UI 组件库开发工具 / 辅助库测试相关表单和数据展示其它实用类代码重构应用迁移:PWA代码组织与架构建议(选项) 下面是一个 React 技术栈常用库/工具清单,按不同分类整理,涵盖开发、状态管理…...
FreeSWITCH的SIP配置
确认 FreeSWITCH 的 SIP 配置 FreeSWITCH 的 SIP 配置文件通常位于 /usr/local/freeswitch/conf/sip_profiles 目录下。默认情况下,FreeSWITCH 使用 internal.xml 和 external.xml 作为 SIP 配置文件。 查看 internal.xml 配置 编辑 /usr/local/freeswitch/conf/sip…...
Spark核心知识总结
一、Spark运行架构 (一)整体结构 Spark框架采用标准master - slave结构,Driver为master管理作业任务调度,Executor为slave负责实际执行任务。 (二)核心组件 1. Driver:执行Spark任务的main方法&…...
第1节:计算机视觉发展简史
计算机视觉与图像分类概述:计算机视觉发展简史 计算机视觉(Computer Vision)作为人工智能领域的重要分支,是一门研究如何使机器"看"的科学,更具体地说,是指用摄影机和计算机代替人眼对目标进行识…...
2D 与 3D 连线效果全解析 | 从平面到立体
HT 是一个灵活多变的前端组件库,具备丰富的功能和效果,满足多种开发需求。让我们将其效果化整为零,逐一拆解具体案例,帮助你更好地理解其实现方案。 在此篇文章中,让我们一起深入探讨 2D 与 3D 的连线效果是如何实现的…...
Django Cookies 实际项目示例
Django Cookies 实际项目示例 推荐超级课程: 本地离线DeepSeek AI方案部署实战教程【完全版】Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速入门实战目录 Django Cookies 实际项目示例介绍什么是 Django Cookies?为什么要关心 Django Cookies?Django Cookie…...
【问题排查】SQLite安装失败
启动 Django 自带的开发服务器 python manage.py runserver出现如下报错: [rootiZ2zedudtf2cwzi9argky2Z myproject]# python manage.py runserver Watching for file changes with StatReloader Performing system checks...System check identified no issues (…...
stream流Collectors.toMap(),key值重复问题
文章目录 一、问题二、问题示例三、原因四、解决方法4.1、方案一 一、问题 发现Collectors.toMap的一个坑,若key值重复的时候会抛异常。如: IllegalStateException: Duplicate key 男 二、问题示例 报错示例如下: import lombok.AllArgsC…...
STM32(基于标准库)
参考博客:江科大STM32笔记 Stm32外设 一、GPIO 基础 GPIO位结构 I/O引脚的保护二极管是对输入电压进行限幅的上面的二极管接VDD, 3.3V,下面接VSS, 0V,当输入电压 >3.3V 那上方这个二极管就会导通,输入电压产生的电流就会大部分充入VD…...
OpenStack Yoga版安装笔记(十八)Self-service networks配置笔记
1、官方文档 在OpenStack官方安装文档中,提供了两个网络配置选项: Option1:Provider networksOption2:Self-service networks 这两个选项并不冲突,可以在OpenStack环境中同时配置。 在《OpenStack Yoga版安装笔记&…...
2025年黑龙江建筑安全员 C3 证考试题库练习题
黑龙江建筑安全员 C3 证考试题库练习题 1、消防控制室是设有火灾自动报警设备和消防设施控制设备,用于接收、显示、处理( ),控制相关消防设施的专门处所2。 A. 安全信息 B. 设备信息 C. 通讯信号 D. 火灾报警信号 答案&…...
JavaScript数据结构-Map的使用
在 JavaScript 中,Map 是 ES6 引入的一种新的数据结构,它类似于对象,也是键值对的集合,但 Map 的键可以是任意类型的值(对象、函数、基本类型等),而传统对象的键只能是字符串或 Symbolÿ…...
LeetCode面试经典150题
目录 力扣80. 删除有序数组中的重复项 II 代码解析 力扣274. H 指数 代码解析 力扣151. 反转字符串中的单词 解析代码 力扣12. 整数转罗马数字 解析代码 力扣28. 找出字符串中第一个匹配项的下标 解析代码1(暴力模拟) 解析代码2(K…...
mysql之等值连接8个实例
以下实例以常见的业务场景为例,使用 MySQL 语法,假设存在员工表(employees)、部门表(departments)、订单表(orders)、客户表(customers)等,来展示…...
C基础笔记_指针专题
一:C 和 C 偏爱使用指针的原因 1. 通过指针可以直接操作内存 C 和 C 是系统级编程语言,它们的设计目标之一是允许开发者直接与硬件交互并高效地管理资源。 指针的本质:指针本质上是一个存储内存地址的变量,它让程序员可以直接访问和操作内…...
GPT-SoVITS Windows 配置与推理笔记(自用)
GPT-SoVITS Windows 配置与推理笔记(自用) 这是给自己留的备份,方便下次查。Windows 端配置和推理为主,代码为核心,直接干货。 环境准备 系统:Windows 10/11Python:3.9(别用别的版…...
【设计模式】面向对象开发学习OOPC
PLOOC-裸机思维 PLOOC OOPC精要——撩开“对象”的神秘面纱 C/C面向对象编程之封装-KK 面向过程,本质是“顺序,循环,分支”面向对象,本质是“继承,封装,多态”参考的书籍:《UMLOOPC嵌入式C语言…...
LVGL开发指南
一、主流ARM开发UI界面库 主流ARM开发UI界面库的详细对比分析,从多个维度评估各库的适用场景: 1. 基础对比表 特性LVGLQt for MCUEmbedded WizardTouchGFXemWin许可证MIT开源商业商业商业(STM32免费)商业RAM最小需求16KB512KB64KB256KB50KBFlash占用64KB+1MB+200KB+500KB+1…...