【杰发科技AC7840x测评】+RT-Thread操作系统移植

本文详细描述了如何在AC78406YGLA车规级MCU的开发板上移植RT-Thread操作系统,并实现线程创建与finsh组件的集成,展示了移植过程中的关键步骤和资源使用情况。
摘要由CSDN通过智能技术生成

1.前言
     手上有200个左右的这个芯片,型号一样,没做开发板,正好论坛举行了这次活动申请到了这个开发板。感谢社区和杰发厂家的支持。本次基于AC78406YGLA开发板上移植RT-Thread操作系统以及finsh组件,完成后新建线程进程测试。
2.芯片简介
AC7840x是基于ARM Cortex-M4F内核的车规级MCU,于2022年上市。产品符合AEC-Q100 Grade1,功能安全符合ISO 26262 ASIL-B,信息安全符合SHE标准,支持安全启动。软件生态支持AUTOSAR MCAL4.4,可提供MCAL及配置工具。产品拥有双Bank Flash用于存储程序,支持OTA。资源如下:
 


3.RT-Thread简介
RT-Thread Nano 是一个极简版的硬实时内核,它是由 C 语言开发,采用面向对象的编程思维,具有良好的代码风格,是一款可裁剪的、抢占式实时多任务的 RTOS。其内存资源占用极小,功能包括任务处理、软件定时器、信号量、邮箱和实时调度等相对完整的实时操作系统特性。
在资源足够的情况下可移植finsh组件,如下为RT-Thread软件框图:
 


RT-Thread Nano 支持可裁剪,通过rtconfig.h进行,在本次使用过程中也会用到,需要裁剪一些功能。
同时最关心的就是RT-Thread Nano的使用资源情况了,对 RAM 与 ROM 的开销非常小,在支持 semaphore 和 mailbox 特性,并运行两个线程 (main 线程 + idle 线程) 情况下,ROM 和 RAM 依然保持着极小的尺寸,RAM 占用约 1K 左右,ROM 占用 4K 左右,但实际可能不止,接下来就开始RT-Thread的移植。
4.移植步骤
4.1Kernel添加
下载RT-Thread Nano内核安装包,双击安装就可以:
 


现在打开一个官方例程,这里使用的GPIO Basic
 


在首届面点击RunTime Environment,进入选择RTOS,选址RT-Thread,勾选kernel
 


接下来编译一下,根据提示去修改,编译会出现如下错误,这里是需要添加操作系统的时钟配置。
 


添加操作系统心跳配置
 


接下来在board.c文件中添加滴答定时器中断处理函数。
 


再次编译一下,发现void SysTick_Handler()重定义,在osif_baremetal.c文件中重定义,打开osif_baremetal.c文件,并且将文件属性调整为可写,将void SysTick_Handler(void)屏蔽。
 


在main.c文件中,包含#include <rtthread.h>头文件,将延时函数调整为操作系统的延时函数。
 


下载代码,灯已经开始闪烁,操作系统已经跑起来了。
4.2Finsh控制台添加
同样在添加kernel源码的地方,添加shell,如下所示:
 


先编译一下,会报错,根据报错步骤去实现需要添加的函数或者功能。如下所示,首先需要使能在配置文件中包含finsh_config.h
 


接下来继续编译,如下所示,需要添加串口接收函数。接收一个字符
 


添加字符获取函数,添加相关头文件
 


接下来,接收设置完了,添加输出,没有是不完美的。在rtconfig.h中使能宏定义
 


编译一下,根据提示进行更改。添加串口初始化,将主函数中串口初始化挪过来就行了。
 


接下来添加输出字符函数,同样的需要在board.c文件中添加相应的头文件。
 


4.3创建线程
把上面都移植完成后,创建两个线程进行演示,创建一个LED的和一个RGB的,如下所示。

复制
/* Copyright Statement:

 *

 * This software/firmware and related documentation ("AutoChips Software") are

 * protected under relevant copyright laws. The information contained herein is

 * confidential and proprietary to AutoChips Inc. and/or its licensors. Without

 * the prior written permission of AutoChips inc. and/or its licensors, any

 * reproduction, modification, use or disclosure of AutoChips Software, and

 * information contained herein, in whole or in part, shall be strictly

 * prohibited.

 *

 * AutoChips Inc. (C) 2022. All rights reserved.

 *

 * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES

 * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE")

 * RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER

 * ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL

 * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED

 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR

 * NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH

 * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,

 * INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES

 * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.

 * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO

 * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS

 * SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE

 * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR

 * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S

 * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE

 * RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE

 * AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE

 * CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE.

 */

/******************************************************************************

 * @version: V2.0.1  AC7840x  Demo

 ******************************************************************************/



#include "ac7840x.h"

#include "clock_config.h"

#include "debugout_ac7840x.h"

#include <rtthread.h>

#include "gpio.h"

#include "../src/uart/uart_hw.h"



/* 定义线程控制块 */

static struct rt_thread led_thread;

/* 定义线程栈 */

static rt_uint8_t rt_led_thread_stack[1024];



/* 定义线程控制块 */

static struct rt_thread rgb_thread;

/* 定义线程栈 */

static rt_uint8_t rt_rgb_thread_stack[1024];



void SystemClock_Config(void)

{

    CKGEN_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,

                   g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);

    CKGEN_DRV_UpdateConfiguration(0, CLOCK_MANAGER_POLICY_AGREEMENT);

}





static void led_thread_entry(void* parameter)

{

    while (1)

    {

        LED3_TOGGLE;

        rt_thread_delay(500);   /* 延时500个tick */

    }

}





static void rgb_thread_entry(void* parameter)

{

    while (1)

    {

        RGB_Toggle();

                         

        rt_thread_delay(500);   /* 延时500个tick */

    }

}







int main(void)

{

                        

         rt_thread_init(&led_thread,                 /* 线程控制块 */

                "led1",                       /* 线程名字 */

                led_thread_entry,            /* 线程入口函数 */

                RT_NULL,                      /* 线程入口函数参数 */

                &rt_led_thread_stack[0],     /* 线程栈起始地址 */

                sizeof(rt_led_thread_stack), /* 线程栈大小 */

                10,                            /* 线程的优先级 */

                20);                          /* 线程时间片 */

                                                                

         rt_thread_init(&rgb_thread,                 /* 线程控制块 */

                "rgb",                       /* 线程名字 */

                rgb_thread_entry,            /* 线程入口函数 */

                RT_NULL,                      /* 线程入口函数参数 */

                &rt_rgb_thread_stack[0],     /* 线程栈起始地址 */

                sizeof(rt_rgb_thread_stack), /* 线程栈大小 */

                11,                            /* 线程的优先级 */

                20);                          /* 线程时间片 */                                                

    rt_thread_startup(&led_thread);             /* 启动线程,开启调度 */

                rt_thread_startup(&rgb_thread);             /* 启动线程,开启调度 */                                                





}

4.4 演示
 


5.总结
本次完成RT-Thread操作系统的移植,实现了线程的创建,同时操作操作系统正常运行,添加了finsh组件。总体下来的感觉资料还是挺完善的,有入门手册,每个外设都有笔记,同时这款芯片也支持点击驱动,后面可以往这方面研究。
---------------------
作者:夜声
链接:https://bbs.21ic.com/icview-3345588-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值