CW32移植FreeRTOS

一、下载FreeRTOS

        FreeRTOS下载地址

1、进入官网,选择V9.0.0版本进入

2、选择FreeRTOSv9.0.0.zip下载,点进去等待数秒钟后自动下载

3、将下载后的文件解压,我们需要的是里面一个名为FreeRTOS的文件夹

二、移植FreeRTOS

1、我们需要打开一个例程来移植FreeRTOS,并在该工程下创建一个FreeROTS的文件夹

2、在新建的FreeRTOS文件夹里面再创建三个文件夹:src、port、include

3、将刚才下载的FreeRTOSv9.0.0\FreeRTOS\Source里面的.c文件复制到新建的FreeRTOS\src文件夹下面

4、将刚才下载的FreeRTOSv9.0.0\FreeRTOS\Source\portable里面的RVDS跟MemMang文件夹复制到新建的FreeRTOS\port文件夹下面

5、将刚才下载的FreeRTOSv9.0.0\FreeRTOS\Source\include里面的所有文件复制到新建的FreeRTOS\include文件夹下面

6、因为使用的是CW32L083VxTx StartKit REV01开发板,接下来找到刚才下载的FreeRTOSv9.0.0\FreeRTOS\Demo里面的CORTEX_STM32F103_Keil文件夹,将FreeRTOSConfig.h文件复制到新建的FreeRTOS\include文件夹下面

7、打开工程的Manage Project Items,添加FreeRTOS\port,并为其添加FreeRTOS\port\MemMang里面的heap_4.c和FreeRTOS\port\RVDS\ARM_CM0里面的port.c文件

8、添加FreeRTOS,并为其添加FreeRTOS\src里面的6个.c文件

9、点击魔术棒,将相关的头文件路径添加进来

0

10、修改FreeRTOSConfig.h文件

#define configUSE_PREEMPTION		1
#define configUSE_IDLE_HOOK			0
#define configUSE_TICK_HOOK			0
#define configCPU_CLOCK_HZ			( ( unsigned long ) 48000000 )	
#define configTICK_RATE_HZ			( ( TickType_t ) 1000 )
#define configMAX_PRIORITIES		( 5 )
#define configMINIMAL_STACK_SIZE	( ( unsigned short ) 128 )
#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 4 * 1024 ) )
#define configMAX_TASK_NAME_LEN		( 16 )
#define configUSE_TRACE_FACILITY	0
#define configUSE_16_BIT_TICKS		0
#define configIDLE_SHOULD_YIELD		1

#define xPortPendSVHandler 			PendSV_Handler
#define vPortSVCHandler				SVC_Handler

 11、打开interrupts_cw32l083.c文件,添加头文件,实现SysTick_Handler(void)函数,屏蔽掉SVC_Handler(void)PendSV_Handler(void)函数

void SysTick_Handler(void)
{
	#if (INCLUDE_xTaskGetSchedulerState)
		if(xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
		{
	#endif 
			xPortSysTickHandler();
	#if (INCLUDE_xTaskGetSchedulerState)
		}
		#endif
}

至此就算移植结束了,接下来测试一下移植是否成功

三、代码测试

修改main.c,实现led1跟led2闪烁

#include "../inc/main.h"
#include "FreeRTOS.h"
#include "task.h"

#define LED_GPIO_PORT CW_GPIOC
#define LED_GPIO_PINS GPIO_PIN_3 | GPIO_PIN_2

void Led1Funtion(void* param);
void Led2Funtion(void* param);

int32_t main(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};

    __RCC_GPIOC_CLK_ENABLE();

    GPIO_InitStruct.IT = GPIO_IT_NONE;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pins = LED_GPIO_PINS;

    GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);
	
	TaskHandle_t xHandleLed1;
	TaskHandle_t xHandleLed2;
	
	xTaskCreate(Led1Funtion,"LED1", 100, NULL, 1, &xHandleLed1);
	xTaskCreate(Led2Funtion,"LED2", 100, NULL, 1, &xHandleLed2);
	
	vTaskStartScheduler();
	
	return 0;
}
void Led1Funtion(void* param)
{
	while(1)
	{
		PC03_TOG();
		vTaskDelay(100);
	}
}
void Led2Funtion(void* param)
{
	while(1)
	{
		PC02_TOG();
		vTaskDelay(100);
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值