FreeRTOS和STM32F103c8t6中断中恢复任务出现error:Error:..\FreeRTOS\tasks.c,2806和Error:..\FreeRTOS\portable\RVDS\

我使用的开发板是正点原子的战舰V3,使用正点原子的标准库例程移植的FreeRTOS,在测试任务挂起、恢复的时候遇到的问题。

下面四行是串口打印的error:
挂起LED1Task
Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,378
中断中恢复LED1Task
Error:..\FreeRTOS\tasks.c,2806

下面是exti.c的代码,与FreeRTOS任务挂起恢复例程的代码一模一样。

内容就是初始化KEY、GPIO、EXTI、NVIC,中断服务程序中对指定任务恢复,并进行任务切换,我运行例程的时候是正常运行的,并不会报上诉错误,但是在我移植的工程中使用这个exti就会报错,网上也找不到解决的方案。

#include "delay.h"
#include "usart.h"

#include "FreeRTOS.h"
#include "task.h"

extern TaskHandle_t LED1Task_Handler;

//	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//外部中断 驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/3
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved									  
//   
//外部中断0服务程序
void EXTIX_Init(void)
{
 
 	EXTI_InitTypeDef EXTI_InitStructure;
 	NVIC_InitTypeDef NVIC_InitStructure;

    KEY_Init();	 //	按键端口初始化

  	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	//使能复用功能时钟

    //GPIOE.2 中断线以及中断初始化配置   下降沿触发
  	GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource2);

  	EXTI_InitStructure.EXTI_Line=EXTI_Line2;	//KEY2
  	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;	
  	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  	EXTI_Init(&EXTI_InitStructure);	 	//根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器

    NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;			//使能按键KEY2所在的外部中断通道
  	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x06;	//抢占优先级2, 
  	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;					//子优先级2
  	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;								//使能外部中断通道
  	NVIC_Init(&NVIC_InitStructure);
 
}


 
//外部中断2服务程序
void EXTI2_IRQHandler(void)
{
	BaseType_t xYieldRequired;
	delay_ms(10);//消抖
	if(KEY2==0)	  //按键KEY2
	{
		printf("中断中恢复LED1Task\r\n");
		xYieldRequired = xTaskResumeFromISR(LED1Task_Handler);
		if(xYieldRequired == pdTRUE)
		{
			portYIELD_FROM_ISR( xYieldRequired );
		}
	}
	
	EXTI_ClearITPendingBit(EXTI_Line2);  //清除LINE2上的中断标志位  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
FreeRTOS移植到STM32F103C8T6微控制器上需要一些步骤。下面是大致的移植指南: 1. 了解STM32F103C8T的硬件资源和特性:包括内核、外设、时钟等。这将帮助你适配FreeRTOS到特定的硬件平台上。 2. 准备开发环境:安装适当的集成开发环境(IDE)和编译器,例如Keil MDK、IAR Embedded Workbench等。确保你能够成功编译和烧录STM32F103C8T6芯片。 3. 下载和配置FreeRTOS:从FreeRTOS官方网站下载最新的FreeRTOS源代码,并解压到你的项目目录。在源代码,你可以找到针对不同处理器架构的移植文件夹,如ARM Cortex-M3。 4. 配置FreeRTOS:根据STM32F103C8T6的硬件特性,修改FreeRTOS配置文件(FreeRTOSConfig.h)以适配你的系统。这包括调整任务堆栈大小、优先级和其他配置参数。 5. 创建启动文件:根据你的编译器和开发环境,创建适当的启动文件(startup.s或startup_stm32f10x_md.s)并配置启动向量表、堆栈设置等。 6. 编写硬件相关的启动代码:根据STM32F103C8T6的特性,编写硬件初始化和启动代码,例如初始化系统时钟、外设等。 7. 编写FreeRTOS任务:根据你的应用需求,编写FreeRTOS任务代码,并使用FreeRTOS提供的API创建和管理任务。你可以利用STM32F103C8T6的外设和中断来实现任务间的通信和同步。 8. 编译和烧录:使用你的编译器编译项目,并将生成的可执行文件烧录到STM32F103C8T6芯片上。 以上是一个大致的移植流程。具体的步骤可能因开发环境和需求而有所不同。在进行移植之前,建议先阅读FreeRTOS的官方文档,了解更多关于移植和配置的详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值