13397158231   jevian_ma@worldflying.cn

ch579单片机移植freertos随笔

2023-08-29 01:50:46

ch579一度被称为神之单片机,是同时拥有蓝牙与网口的cortex-m0内核单片机。最关键的是性价比高,5元左右的价格可以横扫大部分应用。

现在就一步一步带领大家开始ch579移植freertos的学习。

首先介绍运行环境,本次使用keil v5作为编译器。这里不提供keil的下载地址与破解工具。

  1. 安装keil,破解,这一步请网友自行解决。

  2. 去“南京沁恒”下载ch579的开发包,并安装开发包中的keil补丁。

  3. 去freertos官网下载最新的freertos,记得下载tls版本,那是稳定版,毕竟商业项目都不想成为小白鼠吧。小沃下的是FreeRTOSv202210.01-LTS

  4. 进入FreeRTOS\FreeRTOS-Kernel里,FreeRTOS-Kernel里的文件就是我们要移植的freertos。

  5. 删除FreeRTOS-Kernel中除了*.c,*.h的文件

  6. 删除portable文件夹下除了Keil、MemMang、RVDS以外的所有文件。Keil与RVDS是因为我们用的是keil作为编译器,MemMang决定着调度方法。

  7. 删除RVDS下除了ARM_CM0外其他的所有文件夹。

  8. 删除MemMang下除了heap_4.c外其他的所有文件。

  9. 剩下的就是准备一个可以用的FreeRTOSConfig.h放到与portable同级的include下了,这里小沃提供一个如下:

/* USER CODE BEGIN Header */
/*
 * FreeRTOS Kernel V10.0.1
 * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy of
 * this software and associated documentation files (the "Software"), to deal in
 * the Software without restriction, including without limitation the rights to
 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 * the Software, and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
 * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
 * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
 * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 *
 * http://www.FreeRTOS.org
 * http://aws.amazon.com/freertos
 *
 * 1 tab == 4 spaces!
 */
/* USER CODE END Header */

#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H

/*-----------------------------------------------------------
 * Application specific definitions.
 *
 * These definitions should be adjusted for your particular hardware and
 * application requirements.
 *
 * These parameters and more are described within the 'configuration' section of the
 * FreeRTOS API documentation available on the FreeRTOS.org web site.
 *
 * See http://www.freertos.org/a00110.html
 *----------------------------------------------------------*/

/* USER CODE BEGIN Includes */
/* Section where include file can be added */
#include "CH57x_common.h"
/* USER CODE END Includes */

/* Ensure definitions are only used by the compiler, and not by the assembler. */
#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
#include <stdint.h>
extern uint32_t SystemCoreClock;
#endif
#define configUSE_PREEMPTION 0 // 协作式调度,无论任务优先级是怎样的,系统会等待当前任务完成并主动释放CPU后,再去切换下一个就绪任务中最高优先级的任务。
#define configUSE_TIME_SLICING 0 // 同上
#define configSUPPORT_STATIC_ALLOCATION 0 // 关闭静态创建任务的函数
#define configSUPPORT_DYNAMIC_ALLOCATION 1 // 启动动态创建任务的函数
#define configUSE_IDLE_HOOK 0 // 不启动idle hook 函数
#define configUSE_TICK_HOOK 0 // 不使用时间片钩子
#define configCPU_CLOCK_HZ FREQ_SYS // 定义cpu时钟频率
#define configTICK_RATE_HZ ((TickType_t)1000) // 其含义是1秒钟tick中断产生的次数
#define configMAX_PRIORITIES (7) // 任务优先级的最大值
#define configMINIMAL_STACK_SIZE ((uint16_t)96)
#define configTOTAL_HEAP_SIZE ((size_t)17 * 1024) // 13*1024+512
#define configMAX_TASK_NAME_LEN (16)
#define configUSE_16_BIT_TICKS 1 // 在FreeRTOS中,eventBits的位宽由 configUSE_16_BIT_TICKS宏开关决定, configUSE_16_BIT_TICKS 为0,则事件eventGroup为32位,其中有24个bit来存储事件标志位, configUSE_16_BIT_TICKS 为1,则则事件eventGroup为16位
#define configUSE_MUTEXES 0 // 不启动互斥量
#define configQUEUE_REGISTRY_SIZE 8 // 定义了可以记录的队列和信号量的最大数目
#define INCLUDE_uxTaskGetStackHighWaterMark 0 // 如果为1,启动高水平线查看,如果为0则启动。
//#define configCHECK_FOR_STACK_OVERFLOW 1
/* Co-routine definitions. */
#define configUSE_CO_ROUTINES 0
#define configMAX_CO_ROUTINE_PRIORITIES (2)

/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function. */
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskCleanUpResources 0
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 0
#define INCLUDE_vTaskDelay 1
#define INCLUDE_xTaskGetSchedulerState 1

/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
/* USER CODE BEGIN 1 */
#define configASSERT(x)       \
  if ((x) == 0)               \
  {                           \
    taskDISABLE_INTERRUPTS(); \
    for (;;)                  \
      ;                       \
  }
/* USER CODE END 1 */

/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler

#endif /* FREERTOS_CONFIG_H */

将所有保留的*.c文件与*.h文件都导入到keil中就导入成功了。


文章作者:沃航科技


优秀产品推荐:可编程网络IO控制器

上一篇:putty的ppk格式私钥与openssh的私钥格式互转的方法

下一篇:长城小主机GW1进入BIOS的方法

联系我们

  • 地址:武汉市东湖高新开发区光谷总部国际1栋2412室
  • QQ:932773931
  • 电话:027-59761089-806
  • 手机:13397158231
  • 邮箱:jevian_ma@worldflying.cn

关注公众号

扫码添加微信

沃航(武汉)科技有限公司版权所有

备案号:鄂ICP备16014230号-1

本网站由提供CDN加速/云存储服务