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

织梦dede新闻网站源码手机站怎样在百度上发布免费广告

织梦dede新闻网站源码手机站,怎样在百度上发布免费广告,免费w视频带痛叫的聊天,杨浦集团网站建设今天博主在用kelil5写stm32的程序时遇到了一个全局变量因为在中断和任务切换时没有加 volatile 修饰,导致任务检测不到标志位变化,无法实现效果的问题。 全部代码: /* USER CODE BEGIN Header */ /***************************************…

今天博主在用kelil5写stm32的程序时遇到了一个全局变量因为在中断和任务切换时没有加 volatile 修饰,导致任务检测不到标志位变化,无法实现效果的问题。

全部代码:

/* 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 "stdio.h"
#include "usart.h"
#include "norflash.h"
#include "command.h"
#include "string.h"
/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN Variables */
#define SFLASH_BACKUP_APPLICATION_ADDRESS 0x380000
#define APPLICATION_SIZE 224*1024
#define SFLASH_SIZE 4*1024*1024
uint8_t recbuffer[1024] = {"hello"};
uint8_t readbuffer[1024] = {0}; 
uint8_t command[512];
int commandLength = 0;
uint8_t uart2_rx_flag;      // 设置标志位
uint32_t uart2_rx_size;   // 记录数据长度
uint8_t uart3_rx_flag;
uint32_t uart3_rx_size;/* 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,
};
/* Definitions for myTask02 */
osThreadId_t myTask02Handle;
const osThreadAttr_t myTask02_attributes = {.name = "myTask02",.stack_size = 128 * 4,.priority = (osPriority_t) osPriorityLow,
};
/* Definitions for myTask03 */
osThreadId_t myTask03Handle;
const osThreadAttr_t myTask03_attributes = {.name = "myTask03",.stack_size = 128 * 4,.priority = (osPriority_t) osPriorityLow,
};/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes *//* USER CODE END FunctionPrototypes */void StartDefaultTask(void *argument);
void StartTask02(void *argument);
void StartTask03(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 */norflash_init();/* 初始化NORFLASH */HAL_UARTEx_ReceiveToIdle_IT(&huart2, recbuffer, sizeof(recbuffer));HAL_UARTEx_ReceiveToIdle_IT(&huart3, readbuffer, sizeof(recbuffer));/* 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);/* creation of myTask02 */myTask02Handle = osThreadNew(StartTask02, NULL, &myTask02_attributes);/* creation of myTask03 */myTask03Handle = osThreadNew(StartTask03, NULL, &myTask03_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 *//* Infinite loop */for(;;) {commandLength = Command_GetCommand(command);if (commandLength != 0) {HAL_UART_Transmit(&huart2, command, commandLength, HAL_MAX_DELAY);}osDelay(500);}/* USER CODE END StartDefaultTask */
}/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void *argument)
{/* USER CODE BEGIN StartTask02 *//* Infinite loop */for(;;){HAL_GPIO_TogglePin(LED5_GPIO_Port, LED5_Pin);HAL_GPIO_TogglePin(LED5_GPIO_Port, LED6_Pin);osDelay(100);}/* USER CODE END StartTask02 */
}/* USER CODE BEGIN Header_StartTask03 */
/**
* @brief Function implementing the myTask03 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask03 */
void StartTask03(void *argument)
{/* USER CODE BEGIN StartTask03 *//* Infinite loop */for(;;){// if(uart2_rx_flag) {//     HAL_UART_Transmit(&huart2, recbuffer, uart2_rx_size, HAL_MAX_DELAY);//     uart2_rx_flag = 0;// }// strcpy(recbuffer,"hello");// HAL_UART_Transmit(&huart3, recbuffer, sizeof(), HAL_MAX_DELAY);// strcpy(recbuffer,"hello");// HAL_UART_Transmit(&huart2, recbuffer, uart2_rx_size, HAL_MAX_DELAY);//  char* msg =  recbuffer;  //recbuffer;//  HAL_UART_Transmit(&huart3, recbuffer, strlen(recbuffer), HAL_MAX_DELAY);// 	HAL_UART_Transmit(&huart2, recbuffer, strlen(recbuffer), HAL_MAX_DELAY);//  osDelay(1000);//UART2收到的数据转发到UART3if(uart2_rx_flag) {HAL_UART_Transmit(&huart3, recbuffer, uart2_rx_size, HAL_MAX_DELAY);uart2_rx_flag = 0;}// UART3收到的数据转发到UART2if(uart3_rx_flag) {HAL_UART_Transmit(&huart2, readbuffer, uart3_rx_size, HAL_MAX_DELAY);uart3_rx_flag = 0;}//osDelay(1000);}/* USER CODE END StartTask03 */
}/* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */
int fputc(int ch, FILE *f) {HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, HAL_MAX_DELAY);return ch;
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {if(GPIO_Pin == OK_Pin) {HAL_GPIO_TogglePin(LED5_GPIO_Port, LED5_Pin);}if(GPIO_Pin == RIGHT_Pin) {HAL_GPIO_TogglePin(LED5_GPIO_Port, LED6_Pin);}if(GPIO_Pin == UP_Pin) {HAL_GPIO_TogglePin(FAULT_GPIO_Port, FAULT_Pin);}
}void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {if(huart == &huart2) {//Command_Write(recbuffer, Size);uart2_rx_flag = 1;      // 设置标志位uart2_rx_size = Size;   // 记录数据长度//HAL_UART_Transmit_IT(&huart2, recbuffer, Size);HAL_UARTEx_ReceiveToIdle_IT(&huart2, recbuffer, sizeof(recbuffer));}if(huart == &huart3) {//串口3收到的数据打印到串口2uart3_rx_flag = 1;uart3_rx_size = Size;//HAL_UART_Transmit_IT(&huart2, recbuffer, Size);HAL_UARTEx_ReceiveToIdle_IT(&huart3, readbuffer, sizeof(readbuffer));}
}/* USER CODE END Application */

出问题的主要代码:

//中间其他代码省略uint8_t uart2_rx_flag;      // 设置标志位
uint32_t uart2_rx_size;   // 记录数据长度
uint8_t uart3_rx_flag;
uint32_t uart3_rx_size;//中间其他代码省略//UART2收到的数据转发到UART3if(uart2_rx_flag) {HAL_UART_Transmit(&huart3, recbuffer, uart2_rx_size, HAL_MAX_DELAY);uart2_rx_flag = 0;}// UART3收到的数据转发到UART2if(uart3_rx_flag) {HAL_UART_Transmit(&huart2, readbuffer, uart3_rx_size, HAL_MAX_DELAY);uart3_rx_flag = 0;}//中间其他代码省略//串口接收中断
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) {if(huart == &huart2) {//Command_Write(recbuffer, Size);uart2_rx_flag = 1;      // 设置标志位uart2_rx_size = Size;   // 记录数据长度//HAL_UART_Transmit_IT(&huart2, recbuffer, Size);HAL_UARTEx_ReceiveToIdle_IT(&huart2, recbuffer, sizeof(recbuffer));}if(huart == &huart3) {//串口3收到的数据打印到串口2uart3_rx_flag = 1;uart3_rx_size = Size;//HAL_UART_Transmit_IT(&huart2, recbuffer, Size);HAL_UARTEx_ReceiveToIdle_IT(&huart3, readbuffer, sizeof(readbuffer));}
}

出问题的现象是

发送到uart2的数据转发给uart3时不能立即转发给uart3,只有当uart3接收到消息转发到uart2时,uart2转发到uart3的消息才会转发一次消息给uart3

解决方法:

定义变量时加volatile

volatile uint8_t uart2_rx_flag;      // 设置标志位
volatile uint32_t uart2_rx_size;   // 记录数据长度
volatile uint8_t uart3_rx_flag;
volatile uint32_t uart3_rx_size;

 问题解决

http://www.dtcms.com/wzjs/302518.html

相关文章:

  • 深圳网站制作建设推广营销软件app
  • 受欢迎的网站开发百度搜索关键词规则
  • 如何做更改网站的图片百度自动驾驶技术
  • 西宁网站制作公司排名跨境电商营销推广
  • 富民县住房和城乡规划建设局网站h5制作
  • 关于建设公司网站的请示广州做seo公司
  • 网站开发fsdpjqgoogleplay安卓版下载
  • 3有免费建网站今日头条新闻10条简短
  • 个人制作网站关键词是怎么排名的
  • 广东高端网站建设公司如何让新网站被收录
  • 北京网站建设公司收购手机百度搜索
  • 又拍网站怎么做semir森马
  • 国外教育网站模板搜索引擎优化的技巧有哪些
  • 西安网站建设有那些公司怎么做线上推广
  • 做任务得佣金的网站网页制作培训教程
  • 网站首页设计过程信息推广服务
  • 做电影网站挣钱吗在线工具网站
  • 要找做冲压件的厂去哪个网站找网络营销是学什么的
  • 用闲置的安卓手机做网站企业品牌网站营销
  • 做网站和做app哪个难中小企业网站
  • 要录制课堂上学生讨论的声音应该选用优化课程设置
  • 网站设计外包协议惠州seo报价
  • 郑州网站开发工程师做互联网推广的公司
  • 做网站v1认证是什么意思营销推广策划
  • wordpress公众号验证码seo免费课程视频
  • 网站 404 错误页面是否自动跳转市场推广策略
  • 石家庄小学网站建设seo网站推广目的
  • 广州哪家公司做网站站内推广方式有哪些
  • 网站开发说明书最新的即时比分
  • 怎样做网站教程游戏代理