硬汉嵌入式论坛

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

[FreeRTOS] 请教, 修改移植贵公司例程运行超过30分钟重启的问题

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2021-6-17 08:19:28 | 显示全部楼层 |阅读模式
使用的是贵公司"V4-303_FreeRTOS实验_任务的创建,删除,挂起和恢复"。修改了以下内容1.将系统主频和时钟节拍
//系统主频,4M
#define configCPU_CLOCK_HZ                        ( ( unsigned long ) 4000000 )        
#define configTICK_RATE_HZ                        ( ( TickType_t ) 500 )

2.删除所有任务,只保留一个每隔2分钟打印一次xTaskGetTickCount()的任务

碰到的问题:
运行程序后每隔大概35分钟左右就自动重启,效果如下:
start
60001
120002
180003
240004
300005
360006
420007
480008
540009
600010
660011
720012
780013
840014
900015
960016

start
60001
120002
180003
240004
300005
360006

。。。

想请教下问题可能的原因


回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2021-6-17 08:42:44 | 显示全部楼层
就改了这个任务代码,麻烦帮看看,谢谢
  1. static void vTaskLED(void *pvParameters)
  2. {
  3.         static portTickType xLastTime;  
  4.         printf("\r\nstart\r\n");
  5.     while(1)
  6.     {
  7.                                         if(xTaskGetTickCount()-xLastTime>60000)
  8.                                         {
  9.                                                 xLastTime = xTaskGetTickCount();
  10.                                                 printf("%d\r\n", xTaskGetTickCount());
  11.                                         }

  12.                                         vTaskDelay(pdMS_TO_TICKS(2));       
  13.     }
  14. }
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106707
QQ
发表于 2021-6-17 09:04:03 | 显示全部楼层
你的介绍太简单了。

比如你说你修改了这个
#define configCPU_CLOCK_HZ                        ( ( unsigned long ) 4000000 )  

修改了这个,你得跟你的系统主频匹配才行,你直接用我们的里仅修改这个,显然不行的,程序里面还有好些地方要修改才可以使用。

建议你找个你自己的板子能用的裸机例子,在这个基础上移植好些。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2021-6-17 09:28:13 | 显示全部楼层
感谢您的回复,我的描述是过于简单了,修改的地方有:
1.文件:stm32f10x.h
#if !defined  HSE_VALUE
#ifdef STM32F10X_CL   
  #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else
        #define HSE_VALUE    ((uint32_t)4000000)
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */





2.文件:system_stm32f10x.c
#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
#define SYSCLK_FREQ_24MHz  24000000
#else
#define SYSCLK_FREQ_HSE    HSE_VALUE
/* #define SYSCLK_FREQ_24MHz  24000000 */


3.文件:freeRTOSconfig.h
#define configCPU_CLOCK_HZ                        ( ( unsigned long ) 4000000 )       
#define configTICK_RATE_HZ                        ( ( TickType_t ) 500 )


4.main.c
注释了key的初始化和led的初始化,只保留了串口初始化;注释了其他任务,只保留了vTaskLED
static void vTaskLED(void *pvParameters)
{
        static portTickType xLastTime;  
        printf("\r\nstart\r\n");
    while(1)
    {
                                        if(xTaskGetTickCount()-xLastTime>600000)
                                        {
                                                xLastTime = xTaskGetTickCount();
                                                printf("%d\r\n", xTaskGetTickCount());
                                        }

                                        vTaskDelay(pdMS_TO_TICKS(2));       
    }
}


其他没有修改的地方了

程序在板子上能正常运行,串口输出正常,时钟等各项参数也没有问题
现在就是有这个重启的问题

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106707
QQ
发表于 2021-6-17 15:12:27 | 显示全部楼层
tenacity2012 发表于 2021-6-17 09:28
感谢您的回复,我的描述是过于简单了,修改的地方有:
1.文件:stm32f10x.h
#if !defined  HSE_VALUE

这个#define configCPU_CLOCK_HZ   要跟你的主频一致,而不是跟 HSE_VALUE一致

其它问题不清楚了,你再找找吧
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-30 10:10 , Processed in 0.270134 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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