当前位置:   article > 正文

【杰发科技AC7840x测评】+RT-Thread操作系统移植_杰理芯片 rtthread

杰理芯片 rtthread

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的,如下所示。

复制
  1. /* Copyright Statement:
  2. *
  3. * This software/firmware and related documentation ("AutoChips Software") are
  4. * protected under relevant copyright laws. The information contained herein is
  5. * confidential and proprietary to AutoChips Inc. and/or its licensors. Without
  6. * the prior written permission of AutoChips inc. and/or its licensors, any
  7. * reproduction, modification, use or disclosure of AutoChips Software, and
  8. * information contained herein, in whole or in part, shall be strictly
  9. * prohibited.
  10. *
  11. * AutoChips Inc. (C) 2022. All rights reserved.
  12. *
  13. * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  14. * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE")
  15. * RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
  16. * ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL
  17. * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
  18. * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
  19. * NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH
  20. * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
  21. * INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES
  22. * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
  23. * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
  24. * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS
  25. * SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE
  26. * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
  27. * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S
  28. * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE
  29. * RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE
  30. * AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
  31. * CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE.
  32. */
  33. /******************************************************************************
  34. * @version: V2.0.1  AC7840x  Demo
  35. ******************************************************************************/
  36. #include "ac7840x.h"
  37. #include "clock_config.h"
  38. #include "debugout_ac7840x.h"
  39. #include <rtthread.h>
  40. #include "gpio.h"
  41. #include "../src/uart/uart_hw.h"
  42. /* 定义线程控制块 */
  43. static struct rt_thread led_thread;
  44. /* 定义线程栈 */
  45. static rt_uint8_t rt_led_thread_stack[1024];
  46. /* 定义线程控制块 */
  47. static struct rt_thread rgb_thread;
  48. /* 定义线程栈 */
  49. static rt_uint8_t rt_rgb_thread_stack[1024];
  50. void SystemClock_Config(void)
  51. {
  52.     CKGEN_SYS_Init(g_clockManConfigsArr, CLOCK_MANAGER_CONFIG_CNT,
  53.                    g_clockManCallbacksArr, CLOCK_MANAGER_CALLBACK_CNT);
  54.     CKGEN_DRV_UpdateConfiguration(0, CLOCK_MANAGER_POLICY_AGREEMENT);
  55. }
  56. static void led_thread_entry(void* parameter)
  57. {
  58.     while (1)
  59.     {
  60.         LED3_TOGGLE;
  61.         rt_thread_delay(500);   /* 延时500个tick */
  62.     }
  63. }
  64. static void rgb_thread_entry(void* parameter)
  65. {
  66.     while (1)
  67.     {
  68.         RGB_Toggle();
  69.                          
  70.         rt_thread_delay(500);   /* 延时500个tick */
  71.     }
  72. }
  73. int main(void)
  74. {
  75.                        
  76.          rt_thread_init(&led_thread,                 /* 线程控制块 */
  77.                 "led1",                       /* 线程名字 */
  78.                 led_thread_entry,            /* 线程入口函数 */
  79.                 RT_NULL,                      /* 线程入口函数参数 */
  80.                 &rt_led_thread_stack[0],     /* 线程栈起始地址 */
  81.                 sizeof(rt_led_thread_stack), /* 线程栈大小 */
  82.                 10,                            /* 线程的优先级 */
  83.                 20);                          /* 线程时间片 */
  84.                                                                
  85.          rt_thread_init(&rgb_thread,                 /* 线程控制块 */
  86.                 "rgb",                       /* 线程名字 */
  87.                 rgb_thread_entry,            /* 线程入口函数 */
  88.                 RT_NULL,                      /* 线程入口函数参数 */
  89.                 &rt_rgb_thread_stack[0],     /* 线程栈起始地址 */
  90.                 sizeof(rt_rgb_thread_stack), /* 线程栈大小 */
  91.                 11,                            /* 线程的优先级 */
  92.                 20);                          /* 线程时间片 */                                               
  93.     rt_thread_startup(&led_thread);             /* 启动线程,开启调度 */
  94.                 rt_thread_startup(&rgb_thread);             /* 启动线程,开启调度 */                                               
  95. }

4.4 演示
 


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/942233
推荐阅读
相关标签
  

闽ICP备14008679号