聊一聊MCU的软件分层

一、MCU级软件有必要分层吗?

1.1 如果不分层会怎样?

看下面这段示例代码

void main()
{
  sys_init()
  while(1)
  { //用PA1控制LED亮灭
  GPIO_SetBits(GPIOA, GPIO_Pin_1); 
  delay_ms(1000);
  GPIO_ResetBits(GPIOA, GPIO_Pin_1);
  delay_ms(1000);
  }
}

在功能实现上这段代码没有问题。但如果硬件做变动呢?例如更换为其它品牌的mcu或者IO口更改呢?while(1)里面的代码是不是都要发生变动呢?不同的mcu底层库是有区别的。换一个MCU要通篇改动代码非常恶心!工作量也巨大!非常有必要做分层!无论是裸机还是RTOS都要分层。

1.2 软件分层的目的

1,提高对硬件的兼容性。上面已经介绍过了。MCU的软件开发与硬件强相关。在硬件设计时经常会有一供、二供、三供等方案。每换一次硬件就要大改一次代码开发效率低下。

2,增加代码通用性。例如项目A的一部分功能在项目B上曾经实现过,直接从项目B移植过来就行无须改动或者较少改动。

二、 代码层次

2.1 代码分层

可以按照下图来分层

2.2 MCU库层

这一层由MCU库层,由MCU厂家提供。

2.3 MCU_HAL层

这一层是对mcu库层的一个封装。当更换MCU时只需对这一层做修改,不会影响到其它层。如果完全将MCU的库封装一遍工作量将十分巨大,也没必要,需要哪个就封装哪个。例如用到uart了那就只把uart的封装一下,像IIC、SPI等无关的可以不用封装。

2.4 外设驱动层

这一层通过调用MCU_HAL层来实现对外设的驱动。例如,IIC控制电源芯片。驱动通过调用MCU_HAL层实现对电源芯片的操作。在这一层用来实现简单的寄存器读取。

2.5 外设功能层

这一层是对外设的基本功能进行一个封装。拿电源芯片举例。当更换电源芯片时,基本功能不会发生变化,比如控制电压电流等。把这些基础功能封装在此。示例代码如下


void set_cur(uint16_t data)//APP层调用这个API API命名不体现任何芯片信息 
{
  xxx_set_cur();//对芯片进行操作
  ...........
}

2.6  APP层

这一层主要写应用功能。通过调用外设功能HAL层实现。当更换MCU或者某一个芯片时APP层无须改动。

转载来源聊一聊MCU的软件分层MCU的软件有必要分层吗?https://mp.weixin.qq.com/s/iSxxJxYFS7O5zhWk9PqVfg

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
功能安全MCU软件安全机制是指在微控制器单元(MCU)中实施的软件安全措施,旨在确保MCU的功能安全性。这些措施包括以下几个方面: 1. 失效检测和容错机制:MCU软件通常会实施失效检测和容错机制,以确保在发生故障或错误时能够及时检测并采取相应的措施。例如,通过使用冗余计算和校验机制来检测和纠正错误。 2. 安全监控和故障管理:MCU软件会实施安全监控和故障管理机制,以监测系统的状态并采取相应的措施来处理故障。例如,通过监测系统的输入和输出来检测异常情况,并采取相应的措施来保护系统的安全性。 3. 认证和加密:MCU软件可能会使用认证和加密机制来确保系统的安全性。例如,通过使用数字签名和加密算法来验证和保护软件的完整性和机密性。 4. 安全访问控制:MCU软件可能会实施安全访问控制机制,以确保只有经过授权的用户或设备才能访问系统的敏感资源。例如,通过使用访问权限和身份验证来限制对系统资源的访问。 5. 安全测试和验证:MCU软件通常会经过严格的安全测试和验证,以确保其符合功能安全标准和规范。这些测试和验证可以包括静态代码分析、动态测试和模拟攻击等。 总之,功能安全MCU软件安全机制是通过实施失效检测和容错机制、安全监控和故障管理、认证和加密、安全访问控制以及安全测试和验证等措施来确保MCU软件的安全性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值