0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从手写代码到AUTOSAR工具链_MCAL应用篇

汽车ECU开发 来源:你好旧时光追忆 2023-05-30 09:07 次阅读

1 引言

在AUTOSAR分层架构中,MCAL是最基础的一层。由于该层直接和单片机打交道,在整个开发流程中往往最靠前,在PCB测试过程中也发挥着至关重要的作用。

本文以MCAL的串口模块为例,分别讲述UART手工和工具链编程的方法。对于MCAL的其它模块,设计思路和步骤是类似的,可参照本文的要点进行开发。

2 基本概念

为表述方便,首先对本文中出现的概念或术语进行说明,文中黑体字为“官方定义”,红体字加入了本人的理解。

2.1 MCAL

MCAL(Microcontroller Abstraction Layer)指微控制器抽象层,是实现不同硬件接口统一化的特殊层。通过微控制器抽象层可将硬件封装起来, 避免上层软件直接对微控制器的寄存器进行操作。微控制器抽象层包括微控制器驱动(Microcontroller Drivers)、存储器驱动(MemoryDrivers)、通信驱动(Communication Drivers)以及I/O驱动(I/O Drivers)。

简单来说,MCAL就是主控芯片(单片机)的外设驱动。

2.2 静态代码和动态代码

静态代码(Static Code)指各模块功能的具体实现代码;动态代码(Dynamic Code)指由配置工具根据相关配置信息生成的代码,也称为配置代码。

在AUTOSAR应用过程中,静态代码实现了某模块的全部功能,且其内容在工具链不更新的前提下是不会改变的。而具体用到该模块的哪些功能以及用何种方式实现这些功能,是由用户通过工具配置出来的,配置结果生成在动态代码的程序文件中。

2.3 配置文档和设计文档

在工具链开发过程中,文档的编写显得尤为重要。原因是各个功能块都是用工具配置出来的且生成代码量极其庞大,通过代码研读的方式分析查找问题不太现实,需要把整个工作过程记录下来。在MCAL开发过程中最好输出如下2个文档。

设计文档:记录MCAL模块的整个设计过程,包括MCAL相关模块的配置、初始化函数的调用、功能具体实现和调试过程等。

配置文档:作为设计文档的一部分,聚焦MCAL本模块配置的详细步骤。

2.4 MCAL用户手册

MCAL用户手册(User Manual)作为MCAL开发过程中最重要的文档,存在于“EB Tresos Studio”(MCAL配置工具)的安装包中。

3 设计思路

下面着重讲述手工方式和工具链方式设计主控芯片外设驱动在思路上的差别。

3.1 单片机驱动手工编程设计思路

单片机底层驱动手工编程的设计步骤如图3-1所示。

0787d81a-fe86-11ed-90ce-dac502259ad0.png

图3-1: 手写代码实现单片机外设驱动步骤

3.2 单片机驱动工具链开发设计思路

单片机底层驱动工具链开发的设计步骤如图3-2所示。

07a204c4-fe86-11ed-90ce-dac502259ad0.png

图3-2: 工具链开发实现单片机外设驱动步骤

3.3 注意事项

这里着重强调一点,在用工具链开发单片机外设驱动的过程中,千万不要像传统方法那样研究单片机的寄存器和时序。AUTOSAR工程数据结构复杂,函数调用层级众多,在短时间内将某个模块的静态代码研究明白不太现实。从实例和配置项含义入手,再配合以局部改动和调试,往往能取得事半功倍的效果。

4 手写代码实现方法

用手工编程方式实现单片机UART模块,主要包括初始化、中断处理、数据收发等几部分,收发数据往往以字节为单位进行,图4-1和图4-2为手工方式实现UART模块的代码段截图。

07c1f9be-fe86-11ed-90ce-dac502259ad0.png

图4-1: UART手写代码截图-寄存器配置

07d8ddbe-fe86-11ed-90ce-dac502259ad0.png

07f003ae-fe86-11ed-90ce-dac502259ad0.png

08028d26-fe86-11ed-90ce-dac502259ad0.png

0829ddb8-fe86-11ed-90ce-dac502259ad0.png

084ae4c2-fe86-11ed-90ce-dac502259ad0.png

图4-2: UART手写代码截图-功能实现

5 AUTOSAR工具链实现方法

下面列出AUTOSAR工具链实现UART功能的步骤,这里将TC275的P14.10和P14.8用做UART的发送和接收管脚。

表5-1: 主控芯片和工具一览表

序号 内容
1 主控芯片 Infinean TC275
2 MCAL工具 EB Tresos Studio 16.0
3 AUTOSAR工具 ETAS ISOLAR-AB 4.0
4 OS工具 RTA-OS 5.6.3
5 IDE Hightec 4.9.2

5.1 Port模块配置

首先需要配置参与串口通信的P14.8和P14.10,重点是将P14.10的功能配置为“ATX1”。

表5-2: P14.8参数配置

序号 配置项 配置值 说明
1 PortPinId 232 每个管脚唯一的ID号,不可配置
2 PortPinSymbolicName PORT_14_PIN_8 用户为P14.8管脚定义的名字
3 PortPinDirection PORT_PIN_IN 管脚用作输入
4 PortPinDirectionChangeable NC 因未使能相应API函数,不可配置
5 PortPinInputCharacteristic PORT_PIN_IN_NO_PULL 无上下拉输入
6 PortPinInputHysteresis FALSE 不启用滞后功能
7 PortPinOutputCharacteristic NC 输入管脚不可配置
8 PortPinLevelValue PORT_PIN_LEVEL_LOW 管脚缺省值为0
9 PortPinInitialMode PORT_PIN_MODE_GPIO 用作通用输入输出管脚
10 PortPinModeChangeable NC 因未使能相应API函数,不可配置
11 PortPinDriverStrength NC 输入管脚不可配置
12 PortPinPadLevel PORT_PDR_CMOS_AUTOMOTIVE_LEVEL 管脚电平级别:车辆电平
13 PortPinAnalogInput NC 非特定管脚不可配置
14 PortPinControllerSelect NC 非特定管脚不可配置

表5-3: P14.10参数配置

序号 配置项 配置值 说明
1 PortPinId 234 每个管脚唯一的ID号,不可配置
2 PortPinSymbolicName PORT_14_PIN_10 用户为P14.10管脚定义的名字
3 PortPinDirection PORT_PIN_OUT 管脚用作输出
4 PortPinDirectionChangeable NC 因未使能相应API函数,不可配置
5 PortPinInputCharacteristic NC 输出管脚不可配置
6 PortPinInputHysteresis NC 输出管脚不可配置
7 PortPinOutputCharacteristic PORT_PIN_OUT_PUSHPULL 推挽输出
8 PortPinLevelValue PORT_PIN_LEVEL_LOW 管脚缺省值为0
9 PortPinInitialMode PORT_PIN_MODE_ALT4 可选输出功能1:TOUT71
10 PortPinModeChangeable NC 因未使能相应API函数,不可配置
11 PortPinDriverStrength PORT_CMOS_SPEED_GRADE1 驱动强度:CMOS速度等级1
12 PortPinPadLevel PORT_PDR_CMOS_AUTOMOTIVE_LEVEL 管脚电平级别:车辆电平
13 PortPinAnalogInput NC 非特定管脚不可配置
14 PortPinControllerSelect NC 非特定管脚不可配置

5.2 Mcu模块配置

Mcu配置分为AscLin和Clock两部分。

5.2.1 ASCLIN配置

按照图5-1和图5-2所示将AscLin1配置为UART驱动。

086668b4-fe86-11ed-90ce-dac502259ad0.png

图5-1: MCU配置进入

087b9838-fe86-11ed-90ce-dac502259ad0.png

图5-2: ASCLIN配置

5.2.2 时钟配置

按照图5-3和图5-4配置ASCLIN模块的时钟,本文示例配置为100MHz。

088ac9b6-fe86-11ed-90ce-dac502259ad0.png

图5-3: 时钟配置进入

08a57478-fe86-11ed-90ce-dac502259ad0.png

图5-4: ASCLIN时钟配置

5.3 Uart模块配置

依次进行通用箱配置和UART集配置。

5.3.1 通用箱配置

下面介绍UART模块通用(General)箱的配置情况,图5-5为配置界面,表5-4为各项的配置参数和简要说明。

08c10ab2-fe86-11ed-90ce-dac502259ad0.png

图5-5: UART模块通用箱配置界面

表5-4: UART模块通用箱参数配置

序号 配置项 配置值 说明
1 Config Variant VariantPostBuildSelectable
2 Name UartGeneral 配置箱名称
3 UartDevErrorDetect false 开发错误检测禁止
4 UartIndex (0 -> 255) 0 Uart索引,必须为0
5 UartVersionInfoApi false 版本信息API禁用
6 UartDeInitApi false Uart反向初始化API禁用
7 UartAbortReadApi false Uart中止接收API禁用
8 UartAbortWriteApi false Uart中止发送API禁用
9 UartPBFixedAddress false 配置参数集不存放固定地址
10 UartDebugSupport false Uart调试功能禁用
11 UartResetSfrAtInit false 禁止在Uart初始化前复位相关SFR的缺省值
12 UartSleepEnable true 当收到MCU的休眠请求时ASCLIN模块进入休眠状态
13 UartRunningInUser0Mode false
14 UartUserModeInitApiEnable false
15 UartUserModeDeInitApiEnable false
16 UartUserModeRuntimeApiEnable false

5.3.2 UART集配置

下面介绍Uart集(UartConfigSet)箱的配置情况,图5-6为其配置界面。

08d94f00-fe86-11ed-90ce-dac502259ad0.png

图5-6: Uart集配置界面

1.通用配置

图5-7为Uart集通用(General)箱的配置界面,表5-5为各项的配置参数和简要说明。

08eace56-fe86-11ed-90ce-dac502259ad0.png

图5-7: Uart集通用参数配置界面

表5-5: Uart集通用参数配置

序号 配置项 配置值 说明
1 UartSysClockRef /Mcu/Mcu/McuModuleConfiguration_0/McuClockSettingConfig_0/McuClockReferencePoint Uart系统时钟引用,MCU模块配置值为100MHz

2.Uart通道配置

图5-8为Uart通道(UartChannel)箱的配置界面,表5-6为各项的配置参数和简要说明。

08fcc21e-fe86-11ed-90ce-dac502259ad0.png

图5-8: Uart通道配置界面

表5-6:Uart0通道参数配置

序号 配置项 配置值 说明
1 Name UartChannel_0 配置箱名称
2① UartBaudRate 19200 Uart通信波特率
3 UartHwUnit ASCLIN1 硬件ASCLIN通道,使用P14.8(RXD)和P14.10(TXD)口
4 UartChannelId 0 Uart通道ID,不可配置
5 UartAutoCalcBaudParams true 自动波特率计算使能
6 UartChanBaudNumerator - BRG寄存器的分子域,自动计算波特率时无需配置
7 UartChanBaudDenominator - BRG寄存器的分母域,自动计算波特率时无需配置
8 UartChanBaudPrescalar - BITCON寄存器的分频域,自动计算波特率时无需配置
9 UartChanBaudOverSampling - BITCON寄存器的采样过密域,自动计算波特率时无需配置
10 UartRxPinSelection SELECT_DATALINE_D Rx口选择:P14.8为ASCLIN1的数据线D
11 UartDataLength 8 Uart数据长度
12 UartStopBits 1 Uart停止位
13 UartParityBit NOPARITY Uart奇偶校验
14 UartCTSEnable false CTS功能禁止
15 UartCTSPolarity - CTS功能禁止时无需配置
16 Name UartNotification 配置箱名称
17 UartTransmitNotifPtr UartTransmitNotifPtr 发送完毕的通知函数
18 UartRecieveNotifPtr UartReceiveNotifPtr 接收到数据的通知函数
19 UartAbortTransmitNotifPtr NULL_PTR 中止发送操作后调用
20 UartAbortReceiveNotifPtr NULL_PTR 中止接收操作后调用

①波特率计算公式(fA= 100MHz)

091b25ec-fe86-11ed-90ce-dac502259ad0.png

5.3.3 版本配置

下面介绍Uart模块版本(Published Information)箱的配置情况,图5-9为配置界面,表5-7为各项的配置参数和简要说明。

093d172e-fe86-11ed-90ce-dac502259ad0.png

图5-9: Uart模块版本箱配置界面

表5-7: Uart模块版本箱参数配置

序号 配置项 配置值 说明
1 ArMajorVersion 0 Autosar主版本,不可配置
2 ArMinorVersion 0 Autosar子版本,不可配置
3 ArPatchVersion 0 Autosar补丁版本,不可配置
4 SwMajorVersion 1 软件主版本,不可配置
5 SwMinorVersion 3 软件子版本,不可配置
6 SwPatchVersion 0 软件补丁版本,不可配置
7 ModuleId 255 模块ID,不可配置
8 VendorId 17 供应商ID,不可配置
9 VendorApiInfix - API中缀,不可配置
10 Release _TRICORE_TC275 发布,不可配置

5.4 Irq模块配置

根据需要配置UART模块的中断类型和中断类别,UART的中断类型包括Tx中断、Rx中断和Err中断;中断类别分为一类中断和二类中断,两者的区别和配置方法如表5-8所列。

表5-8: 中断类别说明

事项 一类中断 二类中断
含义 中断服务子程序直接响应 操作系统接管
类别配置① 在MCAL的Irq模块配置为CAT1 在MCAL的Irq模块配置为CAT23
优先级配置② 在MCAL的Irq模块中配置 在RTA-OS中配置,MCAL的Irq模块写0
应用③ 通常用于与DMA配合的收发中断 用于不需要与DMA配合的中断
中断初始化函数调用④ 必须调用相应的中断初始化函数 无需调用相应的中断初始化函数

①配置的目的是为了打开Xxx_Irq.c中的相应宏,如图5-10所示

094b1e78-fe86-11ed-90ce-dac502259ad0.png

图5-10: 中断服务子程序示例

②数值越大优先级越高

③与DMA配合的中断,处理源(IrqTosConfig)配置为DMA;其它中断配置为相应的CPUx

④中断初始化函数的格式:Irq_Init

5.4.1 MCAL中断配置

按照图5-11和图5-12配置MCAL的Irq模块,配置参数如表5-9所列,其余项使用缺省值。

0976e3b4-fe86-11ed-90ce-dac502259ad0.png

图5-11: AscLin中断配置进入

09a618c8-fe86-11ed-90ce-dac502259ad0.png

图5-12: AscLin中断配置

表5-9: AscLin中断参数配置

序号 配置项 配置值 说明
1 IrqAscLin1TxCat CAT23 选择二类中断
2 IrqAscLin1RxCat CAT23 选择二类中断
3 IrqAscLin1ErrorCat CAT23 选择二类中断
4 IrqAscLin1TxPrio 0 二类中断优先级在RTA-OS中配置
5 IrqAscLin1RxPrio 0 二类中断优先级在RTA-OS中配置
6 IrqAscLin1ErrorPrio 0 二类中断优先级在RTA-OS中配置
7 IrqAscLin1TxTos CPU0 处理源为CPU0
8 IrqAscLin1RxTos CPU0 处理源为CPU0
7 IrqAscLin1ErrTos CPU0 处理源为CPU0

5.4.2 RTA-OS中断配置

在RTA-OS环境下按照图5-13配置表5-10列出的中断。

09bc8892-fe86-11ed-90ce-dac502259ad0.png

图5-13: OS中断配置

表5-10: OS中断配置参数

序号 名称 类别 优先级 地址
1 ASCLIN1EX_ISR CATEGORY_2 37 ASCLIN 1 Error (SRC_ASCLIN1ERR)
2 ASCLIN1RX_ISR CATEGORY_2 38 ASCLIN 1 Receive (SRC_ASCLIN1RX)
3 ASCLIN1TX_ISR CATEGORY_2 39 ASCLIN 1 Transmit (SRC_ASCLIN1TX)

注意:上表中的“名称”项非自行命名,须与Xxx_Irq.c中的名称一致,否则编译无法通过。

09d72756-fe86-11ed-90ce-dac502259ad0.png

图5-14: 中断配置名称示例

5.4.3 代码生成

需在RTA-OS中生成OS代码,再在ISOLAR-AB中进行抽取、BSW代码生成、RTE代码生成等操作。

5.5 初始化函数调用

UART模块初始化函数调用在EcuM模块中进行。

5.5.1 模块配置

在ISOLAR-AB中按照图5-15和图5-16的步骤配置表5-11中的参数。

09e4cbf4-fe86-11ed-90ce-dac502259ad0.png

图5-15: EcuM配置启动

0a22c684-fe86-11ed-90ce-dac502259ad0.png

图5-16: EcuM串口初始化配置

表5-11: Uart初始化参数配置

序号 配置项 配置值 说明
1 ShortName Uart 配置箱名称
2 EcuMModuleID Uart 初始化模块的短名称
3 EcuMModuleParameter POSTBUILD_PTR 函数原型和输入参数定义
4 EcuMModuleService Init 模块初始化方式,按照这里配置的初始化函数调用方式为Uart_Init(&Uart_Config)
5 EcuMRbDriverInitCoreId - 指定驱动初始化被哪个核调用
6 EcuMRbMonitoringCapable - 指定模块不生成监控服务
7 EcuMRbSequenceID - 生成的功能桩基于模块配置的顺序
8 EcuMModuleRef - 模块示例的外部引用,不配置EcuMModuleID时有效

5.5.2 代码编写

在程序文件中编写如图5-17所示的宏定义。

0a45078a-fe86-11ed-90ce-dac502259ad0.png

图5-17: Uart初始化宏定义

5.6 调试代码编写

UART模块常用的API函数如表5-12所列。

表5-12: UART模块API函数功用

序号 函数名 输入参数 输出参数 说明
1 Uart_Init Uart配置集指针 UART模块初始化
2 Uart_Read Channel:接收数据的Uart通道
MemPtr:接收数据存储首地址
Size:准备接收的字节数
UART接收
3 Uart_Write Channel:发送数据的Uart通道
MemPtr:发送数据存储空间首地址
Size:要发送的字节数
UART发送
4 UartTransmitNotifPtr ErrorId:错误ID UART发送完毕通知函数
5 UartReceiveNotifPtr ErrorId:错误ID UART接收完毕通知函数

调试代码的功用:将接收到的25字节数据发出,图5-18为其主要代码的截图。

如果接收的数据少于25字节,只有在收全25字节后,才执行数据发送的操作;如果接收的数据多于25字节,只接收前25字节并发出。

0a5e0e38-fe86-11ed-90ce-dac502259ad0.png

图5-18: UART收发调试核心代码






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6809

    浏览量

    147637
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620838
  • AUTOSAR
    +关注

    关注

    9

    文章

    329

    浏览量

    21130
  • Uart串口
    +关注

    关注

    0

    文章

    28

    浏览量

    6715

原文标题:从手写代码到AUTOSAR工具链_MCAL应用篇

文章出处:【微信号:eng2mot,微信公众号:汽车ECU开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    使用doxygen分析MCAL源码的层次架构

    阅读MCAL源码包中的源码,猜测MCAL可能只是MCU底层SDK向AutoSAR的一个适配接口。
    的头像 发表于 11-02 12:25 526次阅读
    使用doxygen分析<b class='flag-5'>MCAL</b>源码的层次架构

    一网打尽AUTOSAR MCAL模块

    MCAL:微控制器抽象层;位于BSW层中的最下层;
    的头像 发表于 01-25 16:30 625次阅读
    一网打尽<b class='flag-5'>AUTOSAR</b> <b class='flag-5'>MCAL</b>模块

    Shield Buddy TC375开发板是否支持将经典AUTOSAR堆栈(COMM,DIAG)移植该开发板上?

    Shield Buddy TC375开发板是否支持将经典 AUTOSAR 堆栈(COMM,DIAG)移植该开发板上? 它适用于 MCAL 驱动程序吗? 另外,请建议使用支持经典 AUTO
    发表于 01-30 08:30

    AUTOSAR MCAL MCU模块的相关资料分享

    简介MCU驱动程序提供微控制器初始化,掉电功能,复位和微控制器其他MCAL软件模块所需的特定功能的服务(这里主要指那些公共寄存器的设置)。需要注意的是,启动代码和用于升级的Bootloader是不在AUTOSAR负责范围内的,
    发表于 11-03 08:18

    基于RT-Thread内核的AUTOSAR在n32g上的实现方案

    电子软件的统一从而实现汽车电子软件的复用。本项目是基于autosar3.1的开源代码arctic core,在此基础上,完成在n32g45x上的mcal驱动,适配RT-Thread内核为aut
    发表于 07-27 14:30

    S32K3 MCAL支持哪些版本的Autosar

    我有几个关于 Autosar 的问题1.S32K3 MCAL支持哪些版本的Autosar?2. Autosar R19-11 支持不支持?3. S32K3
    发表于 03-27 07:52

    AUTOSAR_MCAL_CAN_IM.pdf提示找不到 config/CanIf.xdm怎么解决?

    AUTOSAR_MCAL_CAN_IM.pdf 文件中声明还需要 CanIf 插件来实现 CAN 插件。但是,当我尝试在 Tresos 上添加 CanIf 模块时,它给出了一个错误,提示找不到
    发表于 03-30 08:48

    如何在具有S32DS IDE和EB Tresos Studio MCAL配置的DEVKIT-MPC5748G上使用AUTOSAR

    我们正在尝试在具有 S32DS IDE 和 EB Tresos Studio MCAL 配置的 DEVKIT-MPC5748G 上使用 AUTOSAR。 我们正在关注“MPC574XG
    发表于 05-06 08:43

    如何在非Autosar应用中执行I2C?

    什么? 为什么 LPI2C_ 0 / LPI2C_ 1 外围功能不足以使用 I2C RTD ? 2) 如果我开发了 AUTOSAR 应用程序,我就必须使用我很清楚的 HLD (MCAL) I2C 驱动程序
    发表于 11-13 07:04

    AUTOSAR MCAL解析:MCU

    简介MCU驱动程序提供微控制器初始化,掉电功能,复位和微控制器其他MCAL软件模块所需的特定功能的服务(这里主要指那些公共寄存器的设置)。需要注意的是,启动代码和用于升级的Bootloader是不在AUTOSAR负责范围内的,
    发表于 10-27 18:36 29次下载
    <b class='flag-5'>AUTOSAR</b> <b class='flag-5'>MCAL</b>解析:MCU

    AUTOSAR MCAL软件的开发

      我们为我们的AUTOSAR MCAL软件支持“实现汽车所需的行驶、转向、停车和连接”和“实现安全便捷的社会”而感到自豪。我们将继续为AUTOSAR MCAL软件提供更好的质量和性能
    的头像 发表于 04-24 14:44 4037次阅读

    AUTOSAR MCAL-基于Infineon TC3xx芯片的ADC模块

    MCAL的作用是隔离硬件,对上提供统一的标准接口。前面的MCAL_ADC文章已经基于Renesas RH850芯片详细介绍
    的头像 发表于 01-29 16:45 6253次阅读

    云途正式发布量产版本AUTOSAR MCAL驱动软件和配置工具

    云途MCAL软件包RTM v1.1.0包含了YTM32B1ME05 和YTM32B1MD1两个系列车规MCU的片上外设模块的驱动程序代码MCAL驱动模块所需的相应桩模块(stub module)的示例
    的头像 发表于 07-19 15:29 1599次阅读
    云途正式发布量产版本<b class='flag-5'>AUTOSAR</b> <b class='flag-5'>MCAL</b>驱动软件和配置<b class='flag-5'>工具</b>

    AUTOSAR架构MCAL、服务层、ECU抽象层介绍

    1 微控制器抽象层(MCALAUTOSAR CP的微控制器抽象层(MCAL)是AUTOSAR软件架构中的一个重要组成部分,它提供了对底层硬件的抽象和访问接口,以实现软件与硬件之间的
    的头像 发表于 10-27 15:36 3297次阅读

    经纬恒润为国产芯片MCAL软件开发赋能

    近日,经纬恒润为矽力杰半导体开发的AutoSAR底层软件MCAL成功交付。该MCAL产品基于矽力杰SA32Bxx系列5款芯片进行开发,包含了MCU基础驱动、通信驱动、I/O驱动、存储驱动、其他复杂
    的头像 发表于 12-27 08:00 316次阅读
    经纬恒润为国产芯片<b class='flag-5'>MCAL</b>软件开发赋能