STM32移植FreeRTOS无法启动任务的解决方法

2023-05-16

STM32移植FreeRTOS无法启动任务的解决方法

在实验过程中将FreeRTOS源码全部包含在了STM32F103的项目中,但是在实验的过程发现创建的任务无法启动,任务创建程序如下:

#define TEST1_TASK_PRIO		2			//任务优先级
#define TEST1_STK_SIZE 		50  		//任务堆栈大小	
TaskHandle_t Task1_Handler;				//任务句柄
void Test_task1(void *pvParameters);	//任务函数

#define TEST2_TASK_PRIO		3			//任务优先级
#define TEST2_STK_SIZE 		50  		//任务堆栈大小	
TaskHandle_t Task2_Handler;				//任务句柄
void Test_task2(void *pvParameters);	//任务函数

int main(void)
{	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);	//设置系统中断优先级分组4
	delay_init();	  								//延时函数初始化	  
	uart_init(115200);								//串口初始化
	
	printf("StartUp\r\n");
	
	//创建任务
	taskENTER_CRITICAL();           				//进入临界区
	xTaskCreate((TaskFunction_t )Test_task1,     	
							(const char*    )"Test_task1",   	
							(uint16_t       )TEST1_STK_SIZE, 
							(void*          )NULL,				
							(UBaseType_t    )TEST1_TASK_PRIO,	
							(TaskHandle_t*  )&Task1_Handler);  	
							
	xTaskCreate((TaskFunction_t )Test_task2,     	
							(const char*    )"Test_task2",   	
							(uint16_t       )TEST2_STK_SIZE, 
							(void*          )NULL,				
							(UBaseType_t    )TEST2_TASK_PRIO,	
							(TaskHandle_t*  )&Task2_Handler);  	
  taskEXIT_CRITICAL();            					//退出临界区
							
  vTaskStartScheduler();         					//开启任务调度
}	
//任务函数1
void Test_task1(void *pvParameters)
{
	int i;
	while(1)
	{
		for(i=0;i<100;i++)
		{
			printf("Task[1]: %d\r\n",i);
			vTaskDelay(120);
		}
	}
}
//任务函数2
void Test_task2(void *pvParameters)
{
	int i;
	while(1)
	{
		for(i=0;i<100;i++)
		{
			printf("Task[2]: %d\r\n",i);
			vTaskDelay(120);
		}
	}
}

上列代码在任务创建流程没有发现太大问题,百度搜了一下,说是受堆栈大小影响,但试了没有效果,于是在检查"FreeRTOSConfig.h"配置的过程中发现里面没有包含下列宏定义:

#define xPortPendSVHandler 	PendSV_Handler
#define vPortSVCHandler 	SVC_Handler

在"FreeRTOSConfig.h"里面复制这两行宏定义之后,任务开始正常执行。
解决办法:
将上列两行宏定义代码复制到"FreeRTOSConfig.h"头文件当中即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32移植FreeRTOS无法启动任务的解决方法 的相关文章

  • FreeRTOS 配置TICK_RATE_HZ

    我使用的是带有 5 4 版 FreeRTOS 的 MSP430f5438 我有一个有趣的问题 我无法弄清楚 基本上 当我将 configTICK RATE HZ 设置为不同的值时 LED 闪烁得更快或更慢 它应该保持相同的速率 我将 con
  • 在 MCU 内部 FLASH 中从一个固件跳转到另一个固件

    我目前正在开发针对 STM32F030C8 的引导加载程序固件应用程序 我在分散文件中指定引导加载程序应用程序将占用主内存位置 0x08000000 到 0x08002FFF 扇区 0 到扇区 2 我还编写了一个主固件应用程序 存储在0x0
  • 如何让printf在STM32F103上工作?

    我是 STM32F103 世界的新手 我有一个STM32F103的演示代码 我正在使用arm none eabi来编译它 我尝试了在谷歌上可以找到的内容 但到目前为止没有任何效果 我已经花了三天时间来解决这个问题 任何人都可以给我一个运行良
  • rt-thread studio中新建5.0不能用

    文章目录 一 版本对比 二 文件和文件夹打斜杠 在使用RT Thread studio创建新工程5 0版本的时候 结果发现新建完成之后程序不能正常运行 但是创建4 10版本的时候却能运行 那肯定是新版本出现了BUG 一 版本对比 首先对比了
  • STM32超声波——HC_SR04

    文章目录 一 超声波图片 二 时序图 三 超声波流程 四 单位换算 五 取余计算 六 换算距离 七 超声波代码 一 超声波图片 测量距离 2cm 400cm 二 时序图 1 以下时序图要先提供一个至少10us的脉冲触发信号 告诉单片机我准备
  • SHT10温湿度传感器——STM32驱动

    实验效果 硬件外观 接线 3 3V供电 IIC通讯 代码获取 查看下方 END
  • 解决KEIL编译慢问题

    两种方案 使用v6版本的ARM Compiler 如果v6版本编译不过 必须使用v5版本的 则可以勾选掉Browse Information选项 提升很明显 1分多钟能优化到几秒 看代码量 但是这个有个弊端 在KEIL中会影响函数跳转 建议
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • 防止GCC LTO删除函数

    我使用 GCC ARM Embedded 和 FreeRTOS FreeRTOS具有的功能vTaskSwitchContext 仅在某些情况下使用 内联汇编代码 问题是 当我使用LTO时 GCC不考虑内联汇编代码并认为该函数没有被使用 因此
  • CMSIS & STM32,如何开始? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在 STM32 上使用 CMSIS 启动项目 网上一搜 没找到具体的教程 有些使用 SPL 开始项
  • STM32F4XX的12位ADC采集数值超过4096&右对齐模式设置失败

    文章目录 一 前言 二 问题1 数值超过4096 三 问题1的排错过程 四 问题2 右对齐模式设置失败 五 问题2的解决方法 5 1 将ADC ExternalTrigConv设置为0 5 2 使用ADC StructInit 函数 一 前
  • FreeRTOS 匈牙利表示法 [重复]

    这个问题在这里已经有答案了 我是 RTOS 和 C 编程的新手 而且我仍在习惯 C 的良好实践 因此 我打开了一个使用 FreeRTOS 的项目 我注意到操作系统文件使用匈牙利表示法 我知道一点符号 但面临一些新的 标准 FreeRTOS
  • Arm:objcopy 如何知道 elf 中的哪些部分要包含在二进制或 ihex 中?

    我正在开发一个项目 其中涉及解析arm elf 文件并从中提取部分 显然 elf 文件中有很多部分没有加载到闪存中 但我想知道 objcopy 到底如何知道要在二进制文件中包含哪些部分以直接闪存到闪存中 以arm elf文件的以下reade
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • 特殊寄存器

    特殊寄存器 文章目录 前言 一 背景 二 2 1 2 2 总结 前言 前期疑问 STM32特殊寄存器到底是什么 特殊寄存器怎么查看和调试代码 本文目标 记录和理解特殊寄存器 一 背景 最近在看ucosIII文章是 里面提到特殊寄存器 这就进
  • STM32 Nucleo 上的上升沿中断多次触发

    我正在使用 STM32 NUCLEO F401RE 微控制器板 我有一个扬声器 经过编程 当向上 向下推操纵杆时 可以按设定的量改变频率 我的问题是 有时 通常 当向上 向下推动操纵杆时 频率会增加 减少多次 这意味着 ISR 正在执行多次
  • 嵌入式 C++11 代码 — 我需要 volatile 吗?

    采用 Cortex M3 MCU STM32F1 的嵌入式设备 它具有嵌入式闪存 64K MCU固件可以在运行时重新编程闪存扇区 这是由闪存控制器 FMC 寄存器完成的 所以它不像a b那么简单 FMC 获取缓冲区指针并将数据刻录到某个闪存
  • 使用 STM32F0 ADC 单独读取不同的输入

    STM32F072CBU 微控制器 我有多个 ADC 输入 并且希望单独读取它们 STMcubeMX 生成样板代码 假设我希望按顺序读取所有输入 但我无法弄清楚如何纠正这个问题 这篇博文 http blog koepi info 2015
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能

随机推荐

  • Apollo代码学习(七)—MPC与LQR比较

    Apollo代码学习 MPC与LQR比较 前言研究对象状态方程工作时域目标函数求解方法 前言 Apollo中用到了PID MPC和LQR三种控制器 xff0c 其中 xff0c MPC和LQR控制器在状态方程的形式 状态变量的形式 目标函数
  • 27 | Ubuntu18.04.5 安装python3.7及卸载

    目录 1 前期准备1 1安装所需依赖 重要 1 2 配置Python版本切换1 2 1 查看候选列表中已有的Python版本1 2 2 添加 python amp python3 指向选择1 2 3 查看候选列表中已有的Python版本1
  • opencv库作为第三方库

    在编译一个依赖opencv库的库时 xff0c 报出以下错误 xff1a undefined reference to symbol ZN2cv6imreadERKNS 6StringEi libopencv core so 2 4 err
  • 银河麒麟V10系统NetworkManager服务启动失败的解决方法

    目录 一 NetworkManger网络服务启动失败 二 故障定位过程 xff08 一 xff09 重装NetworkManager未解决 xff08 二 xff09 重装openssl未解决 三 解决方案 xff08 一 xff09 修改
  • argparse模块

    1模块简介2Example3argparse三个主要函数 parser argparseArgumentParserparseradd argumentargs parserparse args 4ArgumentParser对象 对象参数
  • 【Docker】非root用户加入docker用户组省去sudo (三)

    你问我爱你有多深 xff0c 这坑后面还有坑 为什么需要创建docker用户组 xff1f Docker守候进程绑定的是一个unix socket xff0c 而不是TCP端口 这个套接字默认的属主是root xff0c 其他是用户可以使用
  • 带你玩转Jetson Xavier NX系列教程 | Xavier NX刷机教程

    写在最前 xff1a xff08 转载请注明文章出处 xff09 NVIDIA AGX Jetson Xavier NX 开发人员套件终于拿到手了 xff0c Nx的性能虽然被砍了不少 xff0c 但是完全碾压了Nano和TX2 xff0c
  • 使用Intel RealSense D435i自制离线数据集跑通BundleFusion

    内容概览 摘要操作环境大致流程录制数据集格式转换解析 bag文件时间戳对齐制作源格式封装为 sens格式 离线三维重建修改 zParametersDefault txt修改 zParametersBundlingDefault txt重建效
  • 互斥量、临界区、信号量、事件标志组和消息邮箱

    为了好的理解互斥量 临界区 信号量 事件标志组和消息邮箱 xff0c 下面一些知识对初学者来说很重要 xff1a 为了实现各任务之间的合作和无冲突的运行 xff0c 在有关联的任务之间必须建立一些制约关系 这些制约关系主要有两种 xff1a
  • MAVLink协议通信分析——(二)消息结构

    消息结构 一 消息包结构 消息包结构定义了消息包在发送 接收 初次解析中所需信息的存储规则 在MavLink 1 0版本中 xff0c 消息包结构如下图表所示 首部由STX段引导 xff0c 具体含义可在表中查询 xff0c 其中校验位标记
  • MAVLink协议通信分析——(三)消息解析

    第三章 消息解析 分析过消息包的结构后 xff0c 继续向消息包的内部探索 xff0c 开始分析负载信息PAYLOAD 在消息库中 xff0c 每条消息都作为一个类存在 xff08 Java版本 xff09 xff0c 类中的注释文本详细地
  • Linux 加权限命令 chmod +755,chmod +777,chmod +x 的区别

    chmod 43 x 的意思就是给执行权限 LINUX下不同的文件类型有不同的颜色 xff0c 这里 蓝色表示目录 绿色表示可执行文件 xff0c 可执行的程序 红色表示压缩文件或包文件 浅蓝色表示链接文件 灰色表示其它文件 红色闪烁表示链
  • Docker安装Autoware

    使用gitee上的autoware源码包编译遇到的问题非常多 xff0c 主要是依赖很多 使用Docker来安装autoware相对简单很多 1 xff0c Docker用户权限问题 sudo groupadd docker sudo gp
  • cv_bridge与OpenCV版本关联

    1 xff0c ros melodic中通过apt get安装cv bridge xff0c 其pc文件中依赖的opencv版本为3 2 xff0c 如果系统安装其他的opencv版本 xff0c 需要把cv bridge源码下载到系统本地
  • LLVM/clang & lib路径 & 测试代码

    部分转载自 xff1a Ubuntu编译安装llvm clangUbuntu14 04 Linux安装LLVM clang 3 7 xff08 带有标准库 libc 43 43 xff0c libc 43 43 abi xff09 所需即所
  • Flask+python 爬虫制作股票查询、历史数据、股评词云网页

    自学python的数据分析 xff0c 爬虫后 xff0c 花了几天时间学习Flask做了一个简单的股票查询网页 本想着加入其它的分析板块 xff0c 不过发现部署到服务器还要花钱 xff0c 于是先到此为止 xff0c 后面可能会继续加入
  • 海量数据处理总结

    当数据量变大的时候 xff0c 一些适用较小量数据的算法可能不适用了 xff0c 需要重新考虑具体处理措施 何谓海量数据处理 xff1f 所谓海量数据处理 xff0c 无非就是基于海量数据上的存储 处理 操作 何谓海量 xff0c 就是数据
  • 流媒体之DirectShow——视频采集

    文章目录 一 xff1a 介绍二 xff1a 设备枚举三 xff1a Video Graph3 1 视频预览3 2 录制视频到AVI文件3 3 录制视频到Windows Media File ASF 3 4 录制视频到其他文件格式3 5 录
  • Linux 平台驱动程序与 单片机程序 的异同

    不知不觉 xff0c 已经接触Linux 操作系统四年多 xff0c 对于什么是Linux 下的驱动 xff0c 这件事需要说明一下 1 什么是driver 驱动 首先 xff0c 需要有计算机组成原理的知识 xff0c 才方便了解驱动这个
  • STM32移植FreeRTOS无法启动任务的解决方法

    STM32移植FreeRTOS无法启动任务的解决方法 在实验过程中将FreeRTOS源码全部包含在了STM32F103的项目中 xff0c 但是在实验的过程发现创建的任务无法启动 xff0c 任务创建程序如下 xff1a span clas