硬汉嵌入式论坛

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

[FreeRTOS] 再次移植FreeRTOS又出新的问题。。

[复制链接]

32

主题

88

回帖

184

积分

初级会员

积分
184
发表于 2024-6-14 18:06:38 | 显示全部楼层 |阅读模式


程序是没有报错,调试的时候一直卡在这边,断点都没有命中。
不知道哪里还要改的
[C] 纯文本查看 复制代码
#include "stm32f10x.h"                  // Device header
#include "FreeRTOS.h"
#include "task.h"
//#include "LED.h"
#include "demo.h"
//#include "Delay.h"
//#include "OLED.h"
//#include "Key.h"
/*FreeRTOS配置*/

/* START_TASK 任务 配置
* 包括: 任务句柄 任务优先级 堆栈大小 创建任务
*/

#define START_TASK_PRIO 1
#define START_STK_SIZE 128
TaskHandle_t           StartTask_Handle;
void start_task(void *pvParameters);
 
/* TASK1 任务 配置
* 包括: 任务句柄 任务优先级 堆栈大小 创建任务
*/
#define TASK1_PRIO     2
#define TASK1_STK_SIZE 64
TaskHandle_t           Task1Task_Handle;
void task1(void *pvParameters);

/* TASK2 任务 配置
* 包括: 任务句柄 任务优先级 堆栈大小 创建任务
*/
#define TASK2_PRIO     3
#define TASK2_STK_SIZE 64
TaskHandle_t           Task2Task_Handle;
void task2(void *pvParameters);

/* TASK3 任务 配置
* 包括: 任务句柄 任务优先级 堆栈大小 创建任务
*/
#define TASK3_PRIO     4
#define TASK3_STK_SIZE 64
TaskHandle_t           Task3Task_Handle;
void task3(void *pvParameters);

/**
 * @brief       FreeRTOS例程入口函数
 * @param       无
 * @retval      无
 */
void freeRTOS_demo(void)
{
    xTaskCreate((TaskFunction_t)start_task,
                (const char*   )"start_task",
                (uint16_t      )START_STK_SIZE,
                (void*         )NULL,
                (UBaseType_t   )START_TASK_PRIO,
                (TaskHandle_t* )&StartTask_Handle);
    vTaskStartScheduler();
}
/**
 * @brief       start_task
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 */
void start_task(void *pvParameters)
{
    taskENTER_CRITICAL();
    /*创建任务1*/
    xTaskCreate((TaskFunction_t )task1,
                (const char*    )"task1",
                (uint16_t       )TASK1_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK1_PRIO,
                (TaskHandle_t*   )&Task1Task_Handle);
     
     /*创建任务2*/
    xTaskCreate((TaskFunction_t )task2,
                (const char*    )"task2",
                (uint16_t       )TASK2_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK2_PRIO,
                (TaskHandle_t*  )&Task2Task_Handle);
                
    /*创建任务3*/
    xTaskCreate((TaskFunction_t )task3,
                (const char*    )"task3",
                (uint16_t       )TASK3_STK_SIZE,
                (void*          )NULL,
                (UBaseType_t    )TASK3_PRIO,
                (TaskHandle_t*  )&Task3Task_Handle);
                
    vTaskDelete(StartTask_Handle);  /* 删除开始任务 */
    taskEXIT_CRITICAL();            /* 退出临界区 */
}

/**
 * @brief       task1
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 */
void task1(void *pvParameters)
{
    while(1)
    {
//        LED1_Turn();
//        OLED_ShowString(1, 1, "task1");
        //Delay_ms(1000);
        vTaskDelay(1000);
    }
}

/**
 * @brief       task2
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 */

void task2(void *pvParameters)
{
	uint8_t a=0;
    while(1)
    {
//        LED2_Turn();
//        OLED_ShowString(2, 1, "task2");
        //Delay_ms(1000);
		a++;
        vTaskDelay(500);
    }
}
/**
 * @brief       task3
 * @param       pvParameters : 传入参数(未用到)
 * @retval      无
 * Key_Num = 1 B1; Key_Num = 2 B11;
 */
/* 任务三,判断按键KEY0,按下KEY0删除task1 */
void task3(void *pvParameters)
{
    uint8_t Key_Num = 0;
    while(1)
    {
//        Key_Num = Key_GetNum();
//        if (Key_Num == 1)
//        {
//            if (Task1Task_Handle != NULL)
//            {
//                
//                vTaskDelete(Task1Task_Handle);
//                Task1Task_Handle = NULL;
//                OLED_ShowString(1, 1, "Task1 Delete !");
//                //OLED_ShowString(1, 1, "              ");
//            }
//        }
        vTaskDelay(10);
    }
}




[C] 纯文本查看 复制代码
int main(void)
{
	delay_init();
	freeRTOS_demo();
    

    while (1)
    {
        
    }
}

[C] 纯文本查看 复制代码
void delay_init()
{
#if SYSTEM_SUPPORT_OS  							//如果需要支持OS.
	u32 reload;
#endif
	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);	//选择外部时钟  HCLK/8
	fac_us=SystemCoreClock/8000000;				//为系统时钟的1/8  
#if SYSTEM_SUPPORT_OS  							//如果需要支持OS.
	reload=SystemCoreClock/8000000;				//每秒钟的计数次数 单位为M  
	reload*=1000000/delay_ostickspersec;		//根据delay_ostickspersec设定溢出时间
												//reload为24位寄存器,最大值:16777216,在72M下,约合1.86s左右	
	fac_ms=1000/delay_ostickspersec;			//代表OS可以延时的最少单位	   

	SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk;   	//开启SYSTICK中断
	SysTick->LOAD=reload; 						//每1/delay_ostickspersec秒中断一次	
	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk;   	//开启SYSTICK    

#else
	fac_ms=(u16)fac_us*1000;					//非OS下,代表每个ms需要的systick时钟数   
#endif
}	

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115454
QQ
发表于 2024-6-15 09:13:59 | 显示全部楼层
楼主的介绍都是应用层的,看不出问题来。
回复

使用道具 举报

32

主题

88

回帖

184

积分

初级会员

积分
184
 楼主| 发表于 2024-6-17 09:04:24 | 显示全部楼层
eric2013 发表于 2024-6-15 09:13
楼主的介绍都是应用层的,看不出问题来。


就是会一直卡在SVC这个地方
回复

使用道具 举报

57

主题

656

回帖

832

积分

金牌会员

积分
832
发表于 2024-6-17 16:05:40 | 显示全部楼层
Y1ng 发表于 2024-6-17 09:04
就是会一直卡在SVC这个地方

这个情况是不是没有定义中断函数啊,看看SVC_Handler这个函数有没有定义啊
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 13:53 , Processed in 0.332278 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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