请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

 找回密码
 立即注册
查看: 858|回复: 9
收起左侧

[FreeRTOS] 未进FreeRTOS前用vportmalloc的问题

[复制链接]

9

主题

31

回帖

58

积分

初级会员

积分
58
发表于 2023-4-15 20:10:57 | 显示全部楼层 |阅读模式
在硬件初始化的时候,进入FreeRTOS任务调度之前,给Fatfs文件系统申请内存,想着用vportmalloc来动态申请。我担心会在内存管理初始化之前就进行内存分配,所以大概看了一下vportmalloc函数,发现它会在自己第一次调用时进行初始化。

所以我就直接用了,也不报错。但是我在usbd初始化的时候卡住了,debug的时候发现系统时钟突然不再进中断了,但是会自减,。排除systick初始化错误之后。(我在文件系统初始化之前加延时不会出问题。之后就会卡住。或者把vportmalloc屏蔽也会进systick中断。)
回复

使用道具 举报

9

主题

31

回帖

58

积分

初级会员

积分
58
 楼主| 发表于 2023-4-15 20:12:08 | 显示全部楼层
我的思路是看看是不是哪里把systick的中断关闭了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2023-4-15 21:25:22 | 显示全部楼层
在FreeRTOS进入启动任务之前,任何额外操作都不要做,非常不利于问题的排查以及后续新功能添加维护。

所有RTOS正确的姿势都应该是仅创建一个启动任务,启动后在启动任务里面初始化BSP,创建其他各种应用任务等。
回复

使用道具 举报

4

主题

16

回帖

28

积分

新手上路

初来乍到

积分
28
发表于 2023-5-5 01:05:09 来自手机 | 显示全部楼层
eric2013 发表于 2023-4-15 21:25
在FreeRTOS进入启动任务之前,任何额外操作都不要做,非常不利于问题的排查以及后续新功能添加维护。

所 ...

请问相关初始化也这样吗?如串口通讯任务
回复

使用道具 举报

9

主题

31

回帖

58

积分

初级会员

积分
58
 楼主| 发表于 2023-5-8 15:55:24 | 显示全部楼层
eric2013 发表于 2023-4-15 21:25
在FreeRTOS进入启动任务之前,任何额外操作都不要做,非常不利于问题的排查以及后续新功能添加维护。

所 ...

啊?头一次听说
那么在进入启动任务之前,我应该只初始化时钟,中断优先级,系统定时器,sdram吗?
然后其他非必要的外设都放在初始化任务里?拿小本本记下来
另外大大,我遇见一个内存管理的问题,似乎rtos,malloc,以及lvgl等中间层都提供内存管理功能,是用一个中间层管理所有内存好呢,还是分开分配好?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2023-5-8 15:59:09 | 显示全部楼层
22020843 发表于 2023-5-5 01:05
请问相关初始化也这样吗?如串口通讯任务

对,我们现在新作的uCOS-II,uCOS-III,FreeRTOS,ThreadX,RTX4, RTX5都是这么玩的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2023-5-8 16:01:55 | 显示全部楼层
云安 发表于 2023-5-8 15:55
啊?头一次听说
那么在进入启动任务之前,我应该只初始化时钟,中断优先级,系统定时器,sdram吗 ...

标准姿势

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*        函 数 名: main
*        功能说明: 标准c程序入口。
*        形    参: 无
*        返 回 值: 无
*********************************************************************************************************
*/
int main (void) 
{        
        /* HAL库,MPU,Cache,时钟等系统初始化 */
        System_Init();

        /* 内核开启前关闭HAL的时间基准 */
        HAL_SuspendTick();
        
        /* 内核初始化 */
        osKernelInitialize();                                  

        /* 创建启动任务 */
        ThreadIdStart = osThreadNew(AppTaskStart, NULL, &ThreadStart_Attr);  

        /* 开启多任务 */
        osKernelStart();
        
        while(1);
}

/*
*********************************************************************************************************
*	函 数 名: AppTaskStart
*	功能说明: 启动任务,这里用作BSP驱动包处理。
*	形    参: 无
*	返 回 值: 无
*   优 先 级: osPriorityNormal4  
*********************************************************************************************************
*/
void AppTaskStart(void *argument)
{
	const uint16_t usFrequency = 1; /* 延迟周期 */
	uint32_t tick;
	
	/* 初始化外设 */
	HAL_ResumeTick();
	bsp_Init();

	/* 创建任务 */
	AppTaskCreate();

	/* 获取当前时间 */
	tick = osKernelGetTickCount(); 
	
    while(1)
    {
		/* 需要周期性处理的程序,对应裸机工程调用的SysTick_ISR */
		bsp_ProPer1ms();
		
		/* 相对延迟 */
		tick += usFrequency;                          
		osDelayUntil(tick);
    }
}

回复

使用道具 举报

9

主题

31

回帖

58

积分

初级会员

积分
58
 楼主| 发表于 2023-5-8 16:04:14 | 显示全部楼层
eric2013 发表于 2023-5-8 16:01
标准姿势

[mw_shl_code=c,true]/*

哦哦,学习了,谢谢大大
回复

使用道具 举报

3

主题

158

回帖

167

积分

初级会员

积分
167
发表于 2023-5-18 15:49:45 | 显示全部楼层
eric2013 发表于 2023-4-15 21:25
在FreeRTOS进入启动任务之前,任何额外操作都不要做,非常不利于问题的排查以及后续新功能添加维护。

所 ...

时钟初始化 也需要在rtos任务里吗。
回复

使用道具 举报

36

主题

192

回帖

310

积分

高级会员

积分
310
发表于 2024-3-15 08:43:13 | 显示全部楼层
fyyxxm 发表于 2023-5-18 15:49
时钟初始化 也需要在rtos任务里吗。

freertos自己会初始化嘀嗒时钟的吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-3-29 20:31 , Processed in 0.178673 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表