未进FreeRTOS前用vportmalloc的问题
在硬件初始化的时候,进入FreeRTOS任务调度之前,给Fatfs文件系统申请内存,想着用vportmalloc来动态申请。我担心会在内存管理初始化之前就进行内存分配,所以大概看了一下vportmalloc函数,发现它会在自己第一次调用时进行初始化。所以我就直接用了,也不报错。但是我在usbd初始化的时候卡住了,debug的时候发现系统时钟突然不再进中断了,但是会自减,。排除systick初始化错误之后。(我在文件系统初始化之前加延时不会出问题。之后就会卡住。或者把vportmalloc屏蔽也会进systick中断。)
我的思路是看看是不是哪里把systick的中断关闭了。 在FreeRTOS进入启动任务之前,任何额外操作都不要做,非常不利于问题的排查以及后续新功能添加维护。
所有RTOS正确的姿势都应该是仅创建一个启动任务,启动后在启动任务里面初始化BSP,创建其他各种应用任务等。 eric2013 发表于 2023-4-15 21:25
在FreeRTOS进入启动任务之前,任何额外操作都不要做,非常不利于问题的排查以及后续新功能添加维护。
所 ...
请问相关初始化也这样吗?如串口通讯任务 eric2013 发表于 2023-4-15 21:25
在FreeRTOS进入启动任务之前,任何额外操作都不要做,非常不利于问题的排查以及后续新功能添加维护。
所 ...
啊?头一次听说:funk:
那么在进入启动任务之前,我应该只初始化时钟,中断优先级,系统定时器,sdram吗?
然后其他非必要的外设都放在初始化任务里?拿小本本记下来:loveliness:
另外大大,我遇见一个内存管理的问题,似乎rtos,malloc,以及lvgl等中间层都提供内存管理功能,是用一个中间层管理所有内存好呢,还是分开分配好? 22020843 发表于 2023-5-5 01:05
请问相关初始化也这样吗?如串口通讯任务
对,我们现在新作的uCOS-II,uCOS-III,FreeRTOS,ThreadX,RTX4, RTX5都是这么玩的。 云安 发表于 2023-5-8 15:55
啊?头一次听说
那么在进入启动任务之前,我应该只初始化时钟,中断优先级,系统定时器,sdram吗 ...
标准姿势
/*
*********************************************************************************************************
* 函 数 名: 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);
}
}
eric2013 发表于 2023-5-8 16:01
标准姿势
/*
哦哦,学习了,谢谢大大:hug: eric2013 发表于 2023-4-15 21:25
在FreeRTOS进入启动任务之前,任何额外操作都不要做,非常不利于问题的排查以及后续新功能添加维护。
所 ...
时钟初始化 也需要在rtos任务里吗。 fyyxxm 发表于 2023-5-18 15:49
时钟初始化 也需要在rtos任务里吗。
freertos自己会初始化嘀嗒时钟的吧。
页:
[1]