订票网站开发公司室内设计公司招聘要求

bicheng/2026/1/26 12:46:10/文章来源:
订票网站开发公司,室内设计公司招聘要求,私人app制作器下载,石家庄新闻头条新闻本文通过SDK中最简单的hello_world例程来说明一下双核程序如何运行。在CM7和CM4的工程中都有一个MCMGR(Multicore Manager)文件夹#xff0c;它是用来管理多核之间的操作的#xff0c;当然也包括我们前面提到的那些寄存器的设置。 文章目录 1 MCMGR_EarlyInit1.1 MCMGR_Trigg…本文通过SDK中最简单的hello_world例程来说明一下双核程序如何运行。在CM7和CM4的工程中都有一个MCMGR(Multicore Manager)文件夹它是用来管理多核之间的操作的当然也包括我们前面提到的那些寄存器的设置。 文章目录 1 MCMGR_EarlyInit1.1 MCMGR_TriggerEvent 2 MCMGR_Init函数2.1 MCMGR_RegisterEvent函数2.2 事件回调函数2.3 mcmgr_late_init_internal 3 MCMGR_StartCore函数4 MCMGR_GetStartupData函数5 MU中断接收函数6 双核状态机交互过程详解7 总结 我们现在就以CM7核激活CM4核为例先分析一下CM7核的代码。实际上在CM7的例程中就调用了 MCMGR_EarlyInit、 MCMGR_Init和 MCMGR_StartCore三个函数就能启动M4核了。下面就来分析一下这三个函数 1 MCMGR_EarlyInit 无论是CM7还是CM4都需要调用这个函数它是用来初始化底层的多核管理库(MCMGR)的这个函数应该尽可能在reset_handler附近调用表示某个核已经启动并准备好执行任务。在这里这个函数在ResetISR-SystemInit中就调用了。这个函数最终调用的是mcmgr_early_init_internal mcmgr_status_t mcmgr_early_init_internal(mcmgr_core_t coreNum) {MU_Init(MUA); //实际上就是使能MU的时钟(M7核初始化MUA,M4核这里的参数为MUB)return MCMGR_TriggerEvent(kMCMGR_RemoteCoreUpEvent, 0); }1.1 MCMGR_TriggerEvent MCMGR_TriggerEvent函数实际上调用的是MCMGR_TriggerEventCommon mcmgr_status_t MCMGR_TriggerEvent(mcmgr_event_type_t type, uint16_t eventData) {return MCMGR_TriggerEventCommon(type, eventData, false); }所以来看一下MCMGR_TriggerEventCommon函数 /*! brief Type definition of event types. */ typedef enum _mcmgr_event_type_t {kMCMGR_RemoteCoreUpEvent 1,kMCMGR_RemoteCoreDownEvent,kMCMGR_RemoteExceptionEvent,kMCMGR_StartupDataEvent,kMCMGR_FeedStartupDataEvent,kMCMGR_RemoteRPMsgEvent,kMCMGR_RemoteApplicationEvent,kMCMGR_FreeRtosMessageBuffersEvent,kMCMGR_EventTableLength } mcmgr_event_type_t;static mcmgr_status_t MCMGR_TriggerEventCommon(mcmgr_event_type_t type, uint16_t eventData, bool forcedWrite) {uint32_t remoteData;remoteData (((uint32_t)type) 16) | eventData;return mcmgr_trigger_event_internal(remoteData, forcedWrite); }接着看一下mcmgr_trigger_event_internal函数 /* MCMGR MU channel index - used for passing startupData */ #define MCMGR_MU_CHANNEL 3mcmgr_status_t mcmgr_trigger_event_internal(uint32_t remoteData, bool forcedWrite) {/* When forcedWrite is false, execute the blocking call, i.e. wait until previouslysent data is processed. Otherwise, run the non-blocking version of the MU send function. */if (false forcedWrite){MU_SendMsg(MUA, MCMGR_MU_CHANNEL, remoteData);// M7执行这条,M4的第一个参数MUA换为MUB}else{MU_SendMsgNonBlocking(MUA, MCMGR_MU_CHANNEL, remoteData);// M7执行这条,M4的第一个参数MUA换为MUB}return kStatus_MCMGR_Success; }这里的forcedWrite参数为false的时候执行阻塞写函数等待上一次发送的数据处理完了才发送forcedWrite参数为true时直接往寄存器中写数据这个函数最好搭配中断使用。 从上面我们知道mcmgr_early_init_internal实际上就是通过自己核对应的MU的通道3发送一个组合的32位数(高16位为type低16位为eventData这里type为kMCMGR_RemoteCoreUpEventeventData为0)给对方核对应的MU的通道3。 如果不知道MU的建议看一下我之前介绍MU的文章双核通信之MU消息单元详解 2 MCMGR_Init函数 接着就是调用MCMGR_Init函数 mcmgr_status_t MCMGR_Init(void) {// 通过OCOTP熔丝相应位可以判断当前是CM4(返回0)还是CM7核(返回1)mcmgr_core_t coreNum MCMGR_GetCurrentCore();// 两个回调函数MCMGR_RegisterEvent(kMCMGR_StartupDataEvent, MCMGR_StartupDataEventHandler, (void *)s_mcmgrCoresContext[coreNum]);MCMGR_RegisterEvent(kMCMGR_FeedStartupDataEvent, MCMGR_FeedStartupDataEventHandler, (void *)s_mcmgrCoresContext[(coreNum 0) ? 1 : 0]);return mcmgr_late_init_internal(coreNum); }MCMGR_RegisterEvent用来注册某个事件(参数一)的回调函数(参数二)其中参数三s_mcmgrCoresContext会传给回调函数作为其参数供其使用它的定义如下 typedef struct _mcmgr_core_context {/*! brief Current state of the core. */mcmgr_core_state_t state;/*! brief Startup data, if state kMCMGR_RunningCoreState */uint32_t startupData; } mcmgr_core_context_t;/*! brief Type definition of possible core states. */ typedef enum _mcmgr_core_state {kMCMGR_ResetCoreState 0,kMCMGR_StartupGettingLowCoreState,kMCMGR_StartupGettingHighCoreState,kMCMGR_RunningCoreState, } mcmgr_core_state_t;volatile mcmgr_core_context_t s_mcmgrCoresContext[2] {{.state kMCMGR_ResetCoreState, .startupData 0}, {.state kMCMGR_ResetCoreState, .startupData 0}};看样子似乎是一个状态机其中 s_mcmgrCoresContext[0]用于kMCMGR_StartupDataEvent事件的MCMGR_StartupDataEventHandler回调 s_mcmgrCoresContext[1]用于kMCMGR_FeedStartupDataEvent事件的MCMGR_FeedStartupDataEventHandler回调 具体完成了什么我们后面用到了再分析。 2.1 MCMGR_RegisterEvent函数 顾名思义就是用来注册回调函数的实现也非常简单就是定义了一个结构体数组然后填充即可 /*! brief Type definition of structure with event handler and data. */ typedef struct _mcmgr_event {/*! brief Pointer to callback function. */mcmgr_event_callback_t callback;/*! brief Context data for callback. */void *callbackData; } mcmgr_event_t;mcmgr_event_t MCMGR_eventTable[kMCMGR_EventTableLength] {0};mcmgr_status_t MCMGR_RegisterEvent(mcmgr_event_type_t type, mcmgr_event_callback_t callback, void *callbackData) {if (type kMCMGR_EventTableLength){return kStatus_MCMGR_Error;}MCMGR_eventTable[type].callback ((void *)0);MCMGR_eventTable[type].callbackData callbackData;MCMGR_eventTable[type].callback callback;return kStatus_MCMGR_Success; }在mcmgr_event_type_t有8种事件每个事件占据MCMGR_eventTable数组的一个索引。 接下来看一下两个回调函数完成了什么 2.2 事件回调函数 下面来看一下MCMGR_StartupDataEventHandler和MCMGR_FeedStartupDataEventHandler static void MCMGR_StartupDataEventHandler(uint16_t startupDataChunk, void *context) {mcmgr_core_context_t *coreContext (mcmgr_core_context_t *)context;switch (coreContext-state){case kMCMGR_StartupGettingLowCoreState:coreContext-startupData startupDataChunk; /* Receive the low part */coreContext-state kMCMGR_StartupGettingHighCoreState;(void)MCMGR_TriggerEvent(kMCMGR_FeedStartupDataEvent, (uint16_t)kMCMGR_StartupGettingHighCoreState);break;case kMCMGR_StartupGettingHighCoreState:coreContext-startupData | ((uint32_t)startupDataChunk) 16;coreContext-state kMCMGR_RunningCoreState;(void)MCMGR_TriggerEvent(kMCMGR_FeedStartupDataEvent, (uint16_t)kMCMGR_RunningCoreState);break;default:break;} }static void MCMGR_FeedStartupDataEventHandler(uint16_t startupDataChunk, void *context) {mcmgr_core_context_t *coreContext (mcmgr_core_context_t *)context;switch ((mcmgr_core_state_t)startupDataChunk){case kMCMGR_StartupGettingLowCoreState:(void)MCMGR_TriggerEvent(kMCMGR_StartupDataEvent, (uint16_t)(coreContext-startupData 0xFFFFU));coreContext-state (mcmgr_core_state_t)startupDataChunk;break;case kMCMGR_StartupGettingHighCoreState:(void)MCMGR_TriggerEvent(kMCMGR_StartupDataEvent, (uint16_t)((coreContext-startupData) 16));coreContext-state (mcmgr_core_state_t)startupDataChunk;break;case kMCMGR_RunningCoreState:coreContext-state (mcmgr_core_state_t)startupDataChunk;break;default:break;} }这里的context就是前面注册回调函数时的第三个参数s_mcmgrCoresContext[0/1]前面我们看到默认的state为kMCMGR_ResetCoreState所以不会进入任何分支中具体初始状态在何时改变的我们后续分析。 我们看到这里两个Handler最后都是调用MCMGR_TriggerEvent函数即通过MU发送一个32位数给对方核。 2.3 mcmgr_late_init_internal MCMGR_Init最后调用mcmgr_late_init_internal打开MU的通道3的接收中断 (下面代码为CM7核的CM4核打开的是MUB) mcmgr_status_t mcmgr_late_init_internal(mcmgr_core_t coreNum) {MU_EnableInterrupts(MUA, (uint32_t)kMU_Rx3FullInterruptEnable);NVIC_SetPriority(MUA_IRQn, 2);NVIC_EnableIRQ(MUA_IRQn);return kStatus_MCMGR_Success; }在前面的MCMGR_TriggerEvent中最后也是使用通道3发送的消息所以在SDK中使用MU的通道3来完成双核执行的同步。 3 MCMGR_StartCore函数 对于CM7来说注册完回调函数之后还需要调用MCMGR_StartCore来启动CM4核。 MCMGR_StartCore(kMCMGR_Core1, (void *)(char *)CORE1_BOOT_ADDRESS, 2, kMCMGR_Start_Synchronous);具体实现如下 #define CORE1_BOOT_ADDRESS (void *)0x20200000 MCMGR_StartCore(kMCMGR_Core1, (void *)(char *)CORE1_BOOT_ADDRESS, 2, kMCMGR_Start_Synchronous); //kMCMGR_Core11mcmgr_status_t MCMGR_StartCore(mcmgr_core_t coreNum, void *bootAddress, uint32_t startupData, mcmgr_start_mode_t mode) {mcmgr_status_t ret;/* 填充startupData */s_mcmgrCoresContext[coreNum].startupData startupData;/* 设置相关寄存器 */ret mcmgr_start_core_internal(coreNum, bootAddress);if (mode kMCMGR_Start_Synchronous){/* 等待M4核读取和确认我们刚刚填充的startupData */while (s_mcmgrCoresContext[coreNum].state ! kMCMGR_RunningCoreState){}}return kStatus_MCMGR_Success; }这里假设我们将CM4的程序通过CM7的映射地址0x20200000拷贝到CM4的TCM中了如果CM4的程序在NOR Flash中填写对应的地址即可。 mcmgr_start_core_internal就是我们上一篇文章双核相互激活和启动流程提到的CM7激活CM4相关寄存器的修改 mcmgr_status_t mcmgr_start_core_internal(mcmgr_core_t coreNum, void *bootAddress) {IOMUXC_LPSR_GPR-GPR0 IOMUXC_LPSR_GPR_GPR0_CM4_INIT_VTOR_LOW(((uint32_t)(char *)bootAddress) 3u);IOMUXC_LPSR_GPR-GPR1 IOMUXC_LPSR_GPR_GPR1_CM4_INIT_VTOR_HIGH(((uint32_t)(char *)bootAddress) 16u);SRC-CTRL_M4CORE SRC_CTRL_M4CORE_SW_RESET_MASK;SRC-SCR | SRC_SCR_BT_RELEASE_M4_MASK;return kStatus_MCMGR_Success; }4 MCMGR_GetStartupData函数 在CM4核启动后会调用MCMGR_GetStartupData函数直到这个函数返回kStatus_MCMGR_Success do{status MCMGR_GetStartupData(startupData);} while (status ! kStatus_MCMGR_Success);现在来看一下这个函数 mcmgr_status_t MCMGR_GetStartupData(uint32_t *startupData) {if (s_mcmgrCoresContext[1].state kMCMGR_ResetCoreState){s_mcmgrCoresContext[1].state kMCMGR_StartupGettingLowCoreState;if (kStatus_MCMGR_Success !MCMGR_TriggerEvent(kMCMGR_FeedStartupDataEvent, (uint16_t)kMCMGR_StartupGettingLowCoreState)){return kStatus_MCMGR_Error;}}return mcmgr_get_startup_data_internal(1, startupData); }mcmgr_status_t mcmgr_get_startup_data_internal(mcmgr_core_t coreNum, uint32_t *startupData) {if (s_mcmgrCoresContext[1].state kMCMGR_RunningCoreState){*startupData s_mcmgrCoresContext[1].startupData;return kStatus_MCMGR_Success;}return kStatus_MCMGR_NotReady; }实际上也是和刚刚的状态机相关。 5 MU中断接收函数 现在我们对CM7和CM4的交互过程还是一头雾水前面注册的回调函数什么时刻被调用CM7启动CM4后等待s_mcmgrCoresContext[coreNum].state变为kMCMGR_RunningCoreState还有CM4启动后CM4也要等待状态变化再往下执行程序那么这些状态是在哪里被修改的呢下面就来分析一下这个过程。 前面我们打开了中断所以我们首先看一下中断处理回调函数在通道三收到数据后将调用此回调函数(下面为CM7核MUA的回调MUB的类似) void MU_Rx3FullFlagISR(void) {uint32_t data;uint16_t eventType;uint16_t eventData;#if defined(FSL_FEATURE_MU_SIDE_A)data MU_ReceiveMsgNonBlocking(MUA, 3); #elif defined(FSL_FEATURE_MU_SIDE_B)data MU_ReceiveMsgNonBlocking(MUB, 3); #endif/* To be MISRA compliant, return value needs to be checked even it could not never be 0 */if (0U ! data){eventType (uint16_t)(data 16u);eventData (uint16_t)(data 0x0000FFFFu);if (((mcmgr_event_type_t)eventType kMCMGR_RemoteCoreUpEvent) ((mcmgr_event_type_t)eventType kMCMGR_EventTableLength)){if (MCMGR_eventTable[(mcmgr_event_type_t)eventType].callback ! ((void *)0)){MCMGR_eventTable[(mcmgr_event_type_t)eventType].callback(eventData, MCMGR_eventTable[(mcmgr_event_type_t)eventType].callbackData);}}} }在理论上我们的程序中没有发送数据内容为0的代码但是为了符合MISRA规范这里还是检查了0U ! data。 前面在MCMGR_TriggerEvent中我们将type和event组合成一个32位的数发送给对方这里同样的我们收到数据后取出高16位的type和低16位的event。然后调用我们使用MCMGR_RegisterEvent注册的回调函数第一个参数为eventData第二个参数为我们注册的时候提供的callbackData(这里为s_mcmgrCoresContext)。 6 双核状态机交互过程详解 看完了中断函数后感觉两个核有一些联系了我们先来看一下两个核的执行流程 这些函数前面都分析过了但是里面状态机的状态改变似乎有些复杂而状态的改变是通过双核之间的通道3进行交互的这里我们就来捋清里面的流程 这里通道间发送数据为32位高16位为type低16位为eventData下面都表示为(type, eventData) 1、MCMGR_EarlyInit 发送32位数据(kMCMGR_RemoteCoreUpEvent,0)。由于后面我们在MCMGR_Init函数中并没有注册kMCMGR_RemoteCoreUpEvent的回调函数实际上这个消息会被忽略。 2、MCMGR_Init 这里没有发送任何数据但是注册了两个回调函数在回调函数中会发送数据 3、启动CM4MCMGR_StartCore s_mcmgrCoresContext[1].startupData 2; while (s_mcmgrCoresContext[1].state ! kMCMGR_RunningCoreState);这里CM7将s_mcmgrCoresContext[1]的startupData设置为了2然后等待s_mcmgrCoresContext[1]的state变为kMCMGR_RunningCoreState。 4、CM4和CM7消息同步 (1)CM4在MCMGR_GetStartupData中将s_mcmgrCoresContext[1]的state设置为了kMCMGR_StartupGettingLowCoreState然后向CM7发送(kMCMGR_FeedStartupDataEvent, kMCMGR_StartupGettingLowCoreState)。 (2)在CM7接收到这个32位消息后将进入MCMGR_FeedStartupDataEventHandler中向CM4发送(kMCMGR_StartupDataEvent, 2)然后将state设置为kMCMGR_StartupGettingLowCoreState。 case kMCMGR_StartupGettingLowCoreState:(void)MCMGR_TriggerEvent(kMCMGR_StartupDataEvent, (uint16_t)(coreContext-startupData 0xFFFFU));coreContext-state (mcmgr_core_state_t)startupDataChunk;break;此时双核的状态如下 (3)CM4收到(kMCMGR_StartupDataEvent, 0)进入MCMGR_StartupDataEventHandler的下面分支 case kMCMGR_StartupGettingLowCoreState:coreContext-startupData startupDataChunk; /* Receive the low part */coreContext-state kMCMGR_StartupGettingHighCoreState;(void)MCMGR_TriggerEvent(kMCMGR_FeedStartupDataEvent, (uint16_t)kMCMGR_StartupGettingHighCoreState);break;将startupData设置为2state设置为kMCMGR_StartupGettingHighCoreState然后发送(kMCMGR_FeedStartupDataEvent, kMCMGR_StartupGettingHighCoreState)给CM7。 (4)CM7收到(kMCMGR_FeedStartupDataEvent, kMCMGR_StartupGettingHighCoreState)进入MCMGR_FeedStartupDataEventHandler的下面分支 case kMCMGR_StartupGettingHighCoreState:(void)MCMGR_TriggerEvent(kMCMGR_StartupDataEvent, (uint16_t)((coreContext-startupData) 16));coreContext-state (mcmgr_core_state_t)startupDataChunk;break;这里发送(kMCMGR_StartupDataEvent, (uint16_t)(2 16))给CM4然后设置自身的state为kMCMGR_StartupGettingHighCoreState。 此时双核的状态如下 (5)CM4收到(kMCMGR_StartupDataEvent, 0)后进入MCMGR_StartupDataEventHandler的下面分支 case kMCMGR_StartupGettingHighCoreState:coreContext-startupData | ((uint32_t)startupDataChunk) 16;coreContext-state kMCMGR_RunningCoreState;(void)MCMGR_TriggerEvent(kMCMGR_FeedStartupDataEvent, (uint16_t)kMCMGR_RunningCoreState);break;将startupData与之前收到的低16位进行组合然后赋到startupData中即CM7在MCMGR_StartCore函数中的第三个参数传给了CM4。然后将state设置为kMCMGR_RunningCoreState并向CM7发送(kMCMGR_FeedStartupDataEvent, kMCMGR_RunningCoreState)。 (6)CM7收到(kMCMGR_FeedStartupDataEvent, kMCMGR_RunningCoreState)后进入MCMGR_FeedStartupDataEventHandler中的kMCMGR_RunningCoreState分支 case kMCMGR_RunningCoreState:coreContext-state (mcmgr_core_state_t)startupDataChunk;break;最终就将state设置为了kMCMGR_RunningCoreState。此时在MCMGR_StartCore中等待s_mcmgrCoresContext[1]的state变为kMCMGR_RunningCoreState则成立此时CM7知道CM4已经成功启动。 最终的状态如下 7 总结 从上面状态机分析可知CM7仅用了kMCMGR_FeedStartupDataEvent而CM4仅用了kMCMGR_StartupDataEvent。在CM4启动后先发送一个消息给CM7然后CM7开始传startupData给CM4最终CM7的状态都变为kMCMGR_RunningCoreState表示CM7知道CM4已经启动了就可以执行其它操作了。

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

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

相关文章

学校网站建设实训河池市住房和城乡建设厅网站

二、先搭一个架子 在我还是小白连py语法都不太熟悉的时候,经常在网上看关于自学ui自动化测试的博客,最熟悉的套路莫过于先给你介绍一下selenium的各个api,然后写一套代码去登陆微博或者百度什么的,但我今天不愿意这么写&#xff0…

学生兼职做网站订阅号怎么制作

前言 之前读过一些类的源码,近来发现都忘了,再读一遍整理记录一下。这次读的是 JDK 11 的代码,贴上来的源码会去掉大部分的注释, 也会加上一些自己的理解。 Map 接口 这里提一下 Map 接口与1.8相比 Map接口又新增了几个方法:   …

惠州建设企业网站asp网站怎么下载源码

代码随想录二刷 | 数组 | 螺旋矩阵II 题目描述解题思路 & 代码实现 题目描述 29.螺旋矩阵II 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1&#xff1…

莱芜正规的企业建站公司谷歌google地图

11月22日北京.net俱乐部活动ppt下载以及11月19日微软西格玛IE8开发讲座ppt下载 请点击下面的连接下载[url]http://cid-b10793e754ad25f7.skydrive.live.com/browse.aspx/IE8Training[/url]里面有3个文件,内容包含了IE8课程的主要内容转载于:https://blog.51cto.com…

珠海在线网站制作公司小程序开发公司制作

目录 一、前置工作: 1.整体项目目录结构 2.创建普通javamaven项目。 3.导入依赖,改造成springboot项目 4.配置启动类 5.创建service接口及其实现类 6.创建接口Mapper 7.配置数据源 8.创建数据库表 二、使用MP(mybatisplus)的分页插件 二、使…

搜网站首页不见了seo网站建设有哪些基本流程

前言: 在使用若依框架的过程中,如果是查询结果数据直接返回,那么其自带的分页插件可以正常返回数据以及总条数,若是在业务逻辑层对数据进行了其他二次处理,再返回就会出现异常,无论查询了多少条&#xff0…

如何进入谷歌网站南宁网站推广策略

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式 🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 &…

f式布局网站江苏中禾建设网站

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。 Spring中的单…

购买服务器做网站用动易建设网站教程

一 ACL 简介 ACL是Access Control List(访问控制列表)的缩写,是一种用于控制文件、目录、网络设备等资源访问权限的方法。ACL可以对每个用户或用户组设置不同的访问权,即在访问控制清单中为每个用户或用户组指定允许或禁止访问该资源的权限。它通常由一系列规则组成,规则…

做目录网站注意事项上海搬家公司电话价格表

深入理解Vue3中利用mitt:实现轻量级事件监听与触发 摘要:本文将介绍如何在Vue3中利用mitt库实现轻量级的事件监听与触发。我们将详细介绍mitt库的特性和使用方法,并通过实际示例展示如何在Vue3组件中应用mitt。 一、引言 在前端开发中&…

设计自己的网站自己搭建域名服务器

http://www.cnblogs.com/Lemon-Li/p/3504717.html 图像配准算法一般可分为: 一、基于图像灰度统计特性配准算法;二、基于图像特征配准算法;三、基于图像理解的配准算法。 其中,算法类型二最普遍,基于特征的图像配准算法的核心步骤…

网站定制开发多久时间wordpress支付宝捐赠插件

目录 1、实例化阶段 2、初始化阶段 3、销毁阶段 总结 在Spring框架中,Bean是最基本的组件,它是Spring框架中的一个Java对象。 下面通过Bean来理解bean的生命周期: Bean(initMethod "customInit", destroyMethod "cust…

两学一做知识竞赛网站江宁区建设局网站

文章目录 一、简述 Kubernetes 如何保证集群的安全性二、简述 Kubernetes 准入机制三、简述 Kubernetes RBAC 及其特点(优势)四、简述 Kubernetes Secret 作用五、简述 Kubernetes Secret 有哪些使用方式六、简述 Kubernetes PodSecurityPolicy 机制七、…

在什么网站做推广做网站人员工资

理论知识 定时器定时中断 接线图 定时器工作配置步骤 定时中断和内外时钟源选择 定时器中需要使用的函数 程序实现效果: void TIM_DeInit(TIM_TypeDef* TIMx); **// 恢复定时器的缺省配置**void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef*TIM…

做yy头像的网站常用的搜索引擎有哪些?

什么是Kotlin? Kotlin,如前面所说,它是JetBrains开发的基于JVM的语言。JetBrains因为创造了一个强大的Java开发IDE被大家所熟知。Android Studio,官方的Android IDE,就是基于Intellij,作为一个该平台的插件。 Kotli…

如何做网站大图片免费建立个人网站的视频

适应力和应变力在智能系统中扮演着非常重要的角色。在面对复杂、多变的环境和问题时,一个智能系统需要具备适应和调整自身行为的能力,这就需要依赖适应力和应变力。 适应力指的是系统对环境变化的感知、理解和调整能力。一个具有良好适应力的系统能够及时…

建设银行官方网站登长沙做推广的公司有多少

目录 写在前面准备Open3D使用demo编译demo运行demo相关说明 参考完 写在前面 1、本文内容 Open3D在0.15版之后,提供编译好的包,本文是以最新版(截止202402,0.18.0)为例的Open3D使用教程; Open3D其他版本的编译和使用相关教程&…

一级a做爰片软件网站织梦网站后台密码忘记了怎么做

该文章笔记结合菜鸟教程的排序算法,如果后面认识有改动或者完善再继续 最近笔试很多题目都考察过了基本的排序算法,尤其是快排、冒泡、选择,大家在这一方面一定要注意下。 一. 总述 1. 时间复杂度 详细介绍 1. 冒泡排序 冒泡排序重复地走…

淘宝客网站需要备案微信群免费推广平台

【本长内容】 1. 掌握树的基本概念 2. 掌握二叉树概念及特性 3. 掌握二叉树的基本操作 4. 完成二叉树相关的面试题练习 1. 树形结构 1.1 概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是…

服装电子商务网站有哪些高清做视频在线观看网站

相关文章 【数仓】基本概念、知识普及、核心技术【数仓】数据分层概念以及相关逻辑【数仓】Hadoop软件安装及使用(集群配置)【数仓】Hadoop集群配置常用参数说明【数仓】zookeeper软件安装及集群配置【数仓】kafka软件安装及集群配置【数仓】flume软件安…