FreeRtos任务中使用Delay函数导致系统崩溃之解决方法

目录

一、问题描述

二、解决方法


一、问题描述

最近在移植stm32裸机工程到FreeRtos时出现程序崩溃,网上找了很久没找到原因,最终在B站上找到相关资料解决:

有问题的代码如下,

1,delay函数:

2,任务1代码

2,默认任务实现500ms电平翻转

理论上代码烧录之后应该是任务一正常进行i++,默认任务电平500ms实现翻转,实际上任务一正常进行i++,默认任务电平大约8s实现翻转一次

二、解决方法

出现这种问题的原因是因为delay函数修改了tick里的计数,裸机的话这个没问题,但是freertos调度是用到tick中断来切换任务的,所以导致冲突了。

修改Delay函数

1,Delay初始化

void Delay_Init(void)
	{
		uint32_t reload;
		HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);   
		reload = SystemCoreClock;
		reload = reload/1000;
		SysTick->LOAD = reload;
		SysTick->CTRL|=SysTick_CTRL_CLKSOURCE_Msk;
		g_fac_us = SystemCoreClock/1000000;
	}
 

2,delay_us

void Delay_us(uint32_t nus)
{
	uint32_t ticks;
	uint32_t reload;
	uint32_t told,tnow,tcnt;
	reload = SysTick->LOAD;
	ticks = nus * g_fac_us;
	told = SysTick->VAL;
	while(1)
	{
		tnow = SysTick->VAL;
		if(tnow != told)
		{
			if(tnow < told)
			{
				tcnt += told -tnow;
			}
			else
			{
				tcnt += reload - tnow +told;
			}
			told = tnow;
			if(tcnt >= ticks)
			{
				break;
			}
		}
	}
}

相关推荐

  1. FreeRTOS学习 -- 任务 API 函数

    2024-06-11 19:48:01       39 阅读
  2. FreeRTOS任务间通信方式

    2024-06-11 19:48:01       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-11 19:48:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-11 19:48:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-11 19:48:01       87 阅读
  4. Python语言-面向对象

    2024-06-11 19:48:01       96 阅读

热门阅读

  1. 项目开发流程规范,请查收!

    2024-06-11 19:48:01       30 阅读
  2. WPF用C#代码实现设置Border颜色的渐变

    2024-06-11 19:48:01       28 阅读
  3. VSFTP虚拟用户访问-设置

    2024-06-11 19:48:01       30 阅读
  4. 用链表实现的C语言队列

    2024-06-11 19:48:01       31 阅读
  5. 【React】dayjs -- 格式化时间 的使用

    2024-06-11 19:48:01       29 阅读
  6. 作文美文2段

    2024-06-11 19:48:01       29 阅读
  7. Linux网络服务

    2024-06-11 19:48:01       35 阅读
  8. vue面试题十二

    2024-06-11 19:48:01       32 阅读
  9. 2024.6.7 刷题总结

    2024-06-11 19:48:01       24 阅读
  10. 二层三层转发原理【小白总结版】

    2024-06-11 19:48:01       28 阅读
  11. Pyskl:搭建使用(win)

    2024-06-11 19:48:01       33 阅读
  12. GO——泛型

    2024-06-11 19:48:01       25 阅读