百度网站审核期时间网易企业邮箱pop3设置

张小明 2026/1/2 13:34:32
百度网站审核期时间,网易企业邮箱pop3设置,建筑证书兼职网站,中文域名注册管理办法前置文章#xff1a; Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据#xff08;一#xff09;-CSDN博客Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据#xff08;二#xff09;-CSDN博客 Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送A…前置文章Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据一-CSDN博客Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据二-CSDN博客Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据三-CSDN博客Freertos手把手教STM32CubeMx设置STM32F4芯片DMA发送ADC数据四-CSDN博客在以上章节完成了对框架的初步探索以及对CubeMx的配置在freertos的task中对buffer进行了一些测试实现了ADC的启动 并且进入对应中断发送ADC转换数据到任务1 然后任务1进行接收并且打印的功能但是现在看起来这个转换只能进行一次 下面要对代码进行改进以实现以下功能下面继续上一章的内容继续完成本次目标本期目标理清本工程系统框架弄懂CubeMx配置相关原理及设置的背后含义对DMA以及ADC相关的重要API接口使用详解梳理代码设计流程线程A接收到邮箱后实现两个任务任务一将DMA的下次目标Buffer设置为Buffer2任务二发送消息队列邮箱给线程B然后回到邮箱接收处阻塞住先将接收移到for循环里for(;;) { printf(hello world \r\n); ret_queue xQueueReceive( xQueue1, queue_data_2, portMAX_DELAY); printf(xQueueSend ret_queue [%ld]\r\n , ret_queue); printf(xQueueReceive queue_data_2 [%d]\r\n , queue_data_2); // osDelay(1000); }portMAX_DELAY阻塞的意义如果没有接收到队列信息后会一直阻塞在这里知道有中断发送过来后才会离开邮箱xQueue1 xQueueCreate(10 , 4 );每个元素的大小是四个字节回到正题想要实现接收邮箱的切换实际上很简单 设立一个标志位切换就好了uint32_t DMA_point 0; //for(;;) { printf(hello world \r\n); ret_queue xQueueReceive( xQueue1, queue_data_2, portMAX_DELAY); printf(xQueueSend ret_queue [%ld]\r\n , ret_queue); printf(xQueueReceive queue_data_2 [%d]\r\n , queue_data_2); if( 0 DMA_point) { printf(buffer1 data [%d] \r\n , buffer1[0]); HAL_ADC_Start_DMA(hadc1 , buffer2 , BUFFER_SIZE); //将接收下一个数据的地址换成buffer2 DMA_point 1 ; } else { DMA_point 0 ; printf(buffer2 data [%d] \r\n , buffer2[0]); HAL_ADC_Start_DMA(hadc1 , buffer1 , BUFFER_SIZE); //将接收下一个数据的地址换成buffer2 }在point 0 的时候由buffer1接收在point 1 的时候由buffer2接收在接收完之后对point进行对应的操作从而切换接收数组由此完成可以看到数据非常丝滑的在切换本期代码/* USER CODE BEGIN Header */ /** ****************************************************************************** * File Name : freertos.c * Description : Code for freertos applications ****************************************************************************** * attention * * Copyright (c) 2025 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include FreeRTOS.h #include task.h #include main.h #include cmsis_os.h /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include stdlib.h #include queue.h /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ #define BUFFER_SIZE 1 uint32_t * buffer1 NULL; uint32_t * buffer2 NULL; /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ #define DMA_ADC_CPLT_INT 0xA1 /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN Variables */ extern ADC_HandleTypeDef hadc1; extern DMA_HandleTypeDef hdma_adc1; QueueHandle_t xQueue1 NULL; uint32_t DMA_point 0; // /* USER CODE END Variables */ /* Definitions for defaultTask */ osThreadId_t defaultTaskHandle; const osThreadAttr_t defaultTask_attributes { .name defaultTask, .stack_size 128 * 4, .priority (osPriority_t) osPriorityNormal, }; /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN FunctionPrototypes */ /* USER CODE END FunctionPrototypes */ void StartDefaultTask(void *argument); void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ /** * brief FreeRTOS initialization * param None * retval None */ void MX_FREERTOS_Init(void) { /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* USER CODE BEGIN RTOS_MUTEX */ /* add mutexes, ... */ /* USER CODE END RTOS_MUTEX */ /* USER CODE BEGIN RTOS_SEMAPHORES */ /* add semaphores, ... */ /* USER CODE END RTOS_SEMAPHORES */ /* USER CODE BEGIN RTOS_TIMERS */ /* start timers, add new ones, ... */ /* USER CODE END RTOS_TIMERS */ /* USER CODE BEGIN RTOS_QUEUES */ /* add queues, ... */ /* USER CODE END RTOS_QUEUES */ /* Create the thread(s) */ /* creation of defaultTask */ defaultTaskHandle osThreadNew(StartDefaultTask, NULL, defaultTask_attributes); /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ /* USER CODE BEGIN RTOS_EVENTS */ /* add events, ... */ /* USER CODE END RTOS_EVENTS */ } /* USER CODE BEGIN Header_StartDefaultTask */ /** * brief Function implementing the defaultTask thread. * param argument: Not used * retval None */ /* USER CODE END Header_StartDefaultTask */ void StartDefaultTask(void *argument) { /* USER CODE BEGIN StartDefaultTask */ DMA_point 0 ;//DMA_point 0 往buffer1存入数据 //DMA_point 1 往buffer2存入数据 buffer1 (uint32_t *)malloc((sizeof(uint32_t)* BUFFER_SIZE)); buffer2 (uint32_t *)malloc((sizeof(uint32_t)* BUFFER_SIZE)); if(NULL buffer1) { printf(buffer1 malloc failed \r\n); } if(NULL buffer2) { printf(buffer2 malloc failed \r\n); return; } printf(buffer1 , buffer2 malloc success\r\n ); memset(buffer1, 0xff , (sizeof(uint32_t)* BUFFER_SIZE)); memset(buffer2, 0xff , (sizeof(uint32_t)* BUFFER_SIZE)); printf(Unit test ADC DMA\r\n ); xQueue1 xQueueCreate(10 , 4 ); if(NULL xQueue1) { printf(Queue create failed \r\n); return ; } HAL_StatusTypeDef ret1 HAL_OK; HAL_StatusTypeDef ret2 HAL_OK; ret1 HAL_ADC_Start_DMA(hadc1, buffer1, BUFFER_SIZE); ret2 HAL_ADC_Start_DMA(hadc1, buffer2, BUFFER_SIZE); if(HAL_OK ! ret1) { printf(HAL_ADC1 call failed ); } if(HAL_OK ! ret2) { printf(HAL_ADC2 call failed ); } //UnitTest Queue send and receive BaseType_t ret_queue pdPASS; uint32_t queue_data_2 0xff; /* Infinite loop */ for(;;) { printf(hello world \r\n); ret_queue xQueueReceive( xQueue1, queue_data_2, portMAX_DELAY); printf(xQueueSend ret_queue [%ld]\r\n , ret_queue); printf(xQueueReceive queue_data_2 [%d]\r\n , queue_data_2); if( 0 DMA_point) { printf(buffer1 data [%d] \r\n , buffer1[0]); HAL_ADC_Start_DMA(hadc1 , buffer2 , BUFFER_SIZE); //将接收下一个数据的地址换成buffer2 DMA_point 1 ; } else { DMA_point 0 ; printf(buffer2 data [%d] \r\n , buffer2[0]); HAL_ADC_Start_DMA(hadc1 , buffer1 , BUFFER_SIZE); //将接收下一个数据的地址换成buffer2 } // osDelay(1000); } /* USER CODE END StartDefaultTask */ } /* Private application code --------------------------------------------------*/ /* USER CODE BEGIN Application */ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { /* Prevent unused argument(s) compilation warning */ UNUSED(hadc); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_ADC_ConvCpltCallback could be implemented in the user file */ //printf(buffer1 data [%d] \r\n , buffer1[0]); BaseType_t xHigherPriorityTaskWoken;//PendSV悬起置位为true xHigherPriorityTaskWoken pdFALSE;//初始化 uint32_t dma_pattern_cplt DMA_ADC_CPLT_INT; BaseType_t ret_queue pdPASS; ret_queue xQueueSendFromISR( xQueue1, dma_pattern_cplt, xHigherPriorityTaskWoken ); if( xHigherPriorityTaskWoken ) { taskYIELD (); } printf(QueueSend ret_queue [%ld]\r\n , ret_queue); } void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc) { /* Prevent unused argument(s) compilation warning */ UNUSED(hadc); /* NOTE : This function Should not be modified, when the callback is needed, the HAL_ADC_ErrorCallback could be implemented in the user file */ printf(ADC trasfer error \r\n); } /* USER CODE END Application */
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建个人网站赚钱吗wordpress博客排行

Minecraft模组汉化终极指南:5步实现完美中文界面体验 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 还在为复杂的英文模组界面而烦恼吗?Masa Mods中文汉化资源包…

张小明 2025/12/31 3:02:09 网站建设

如何做网站的百科一个域名下两个wordpress

i18next国际化解决方案:打造无缝多语言切换体验的完整指南 【免费下载链接】i18next i18next: learn once - translate everywhere 项目地址: https://gitcode.com/gh_mirrors/i1/i18next 还在为多语言切换的突兀感而烦恼吗?想要让您的应用在国际…

张小明 2025/12/31 9:50:44 网站建设

樱桃企业网站管理系统商品详情页设计图

2025 年我国知识付费行业市场规模预计将达 2808.8 亿元,用户规模突破 6.4 亿人。在这片看似繁荣的市场中,超过 70% 的创始人 IP 却陷入 “内容同质化、客单价低迷、复购率不足 15%” 的困境。他们依赖 AI 工具生成海量课程、文案,却始终停留在…

张小明 2025/12/31 3:58:26 网站建设

网站怎么做来流量设计公司名称大全与寓意

RAG知识库构建中,文档处理是根基,需根据业务场景灵活处理。知识库本质是优化检索而非简单管理。结构化数据应提取元数据便于精准检索,非结构化数据需分段并提取核心内容。文档处理前需清洗过滤无用信息,避免脏数据影响质量。最终处…

张小明 2025/12/31 4:44:05 网站建设

如何制作课程网站wordpress 文章添加副标题

JVM运行时数据区 线程私有区: 虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧本地方法栈:为native修饰的本地方法提供的空间&#x…

张小明 2025/12/31 5:33:13 网站建设

南昌网站制作代理商涂料网站设计公司

第一章:Docker 与 Vercel AI SDK 的环境变量在现代全栈应用开发中,Docker 和 Vercel AI SDK 的结合为部署生成式 AI 应用提供了强大支持。正确配置环境变量是确保应用在不同环境中安全、稳定运行的关键环节。尤其是在容器化部署时,敏感信息如…

张小明 2025/12/21 13:23:41 网站建设