tenacity2012 发表于 2021-6-17 08:19:28

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

使用的是贵公司"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

。。。

想请教下问题可能的原因


tenacity2012 发表于 2021-6-17 08:42:44

就改了这个任务代码,麻烦帮看看,谢谢
static void vTaskLED(void *pvParameters)
{
        static portTickType xLastTime;
        printf("\r\nstart\r\n");
    while(1)
    {
                                        if(xTaskGetTickCount()-xLastTime>60000)
                                        {
                                                xLastTime = xTaskGetTickCount();
                                                printf("%d\r\n", xTaskGetTickCount());
                                        }

                                        vTaskDelay(pdMS_TO_TICKS(2));       
    }
}

eric2013 发表于 2021-6-17 09:04:03

你的介绍太简单了。

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

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

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

tenacity2012 发表于 2021-6-17 09:28:13

感谢您的回复,我的描述是过于简单了,修改的地方有:
1.文件:stm32f10x.h
#if !definedHSE_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_24MHz24000000
#else
#define SYSCLK_FREQ_HSE    HSE_VALUE
/* #define SYSCLK_FREQ_24MHz24000000 */


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));       
    }
}


其他没有修改的地方了

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

eric2013 发表于 2021-6-17 15:12:27

tenacity2012 发表于 2021-6-17 09:28
感谢您的回复,我的描述是过于简单了,修改的地方有:
1.文件:stm32f10x.h
#if !definedHSE_VALUE


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

其它问题不清楚了,你再找找吧
页: [1]
查看完整版本: 请教, 修改移植贵公司例程运行超过30分钟重启的问题