赞
踩
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所有,任何人未经允许禁止转载。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。