跨平台组件方案设计_组件制作平台 技术方案,2024年最新附面试题

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

2.1 功能独立

组件内部不能互相显式调用,上层组件可以依赖下层组件接口,不同组件之间可以隐式调用;

2.2 功能单一

一个组件实现一个功能;

2.3 组件分类

组件按照功能可以分为4种:通用组件、基础组件、业务组件、应用组件,各组件说明见下表:

类别

功能

备注

平台组件平台相关的硬件抽象层,抽象硬件基础能力,比如PWM,FLASH、UART、TIMER等,兼容不同厂家SDK,向上层业务提供统一接口,连接业务和不同芯片平台,其它组件可以显式调用;说明:不同协议,不同芯片平台驱动实现有差异,建议分芯片平台抽象组件,比如ST的芯片是一个组件,乐鑫的硬件抽象层放到一个组件;虽然不同芯片类型的驱动能力放到不同组件,但是各芯片的sal接口命名是统一的,可以由上层业务统一显式调用。
通用组件集成通用工具,比如:字符转换接口,加解密接口等
基础组件提供基础服务/能力,比如:红外解码,按键事件等
业务组件品类通用业务功能,通常相对稳定;
应用组件是对高频定制业务的抽象,需要适应本地业务变化,持续集成,比如:遥控器/按钮对应的功能库,大客户定制业务等。问题:考虑后续集成功能规模较大,Flash资源可能不够。暂行办法:拆分成颗粒度适当的组件,通过配置项配置;优点:不使用的组件不占用硬件资源;缺点:颗粒度太小,组件数量太多,不好管理。
2.4 组件下沉

将相对稳定的业务下沉,对于那些由于不同品类导致的差异化部分通过注册的方式向开发者提供接口,处理执行结果;比如倒计时功能,照明品类是开关灯,电工品类是开关插座,开关灯/开关插座/其它操作 就是执行结果,应该放到应用层由开发者处理;

2.5 方便剪裁

每个组件都可以单独编译,不能出现不编译某个组件编译报错的情况(个别基础组件除外);每个组件只提供给开发者一个初始化接口;

2.6 兼容接口

组件接口分为:兼容性接口,非兼容性接口两种,实际情况也是如此,很难做到所有接口兼容;但是原则上讲,尽量做成兼容接口;

三、平台适配

针对不同芯片平台的差异处理,基本思路是增加适配层,主要是对硬件驱动的接口适配,有无操作系统适配。具体内容如下:

3.1 硬件适配

对不同硬件的适配,通过增加一个软件抽象层实现,格式类似 manufacturer_sal_xx(),一般芯片厂商都提供了硬件抽象层manufacturer_hal_xx(),但是有些厂商的原厂SDK接口没有抽象hal层。所以如果是已经提供了manufacturer_hal_xx() 接口那么只需要再抽一个manufacturer_sal_xx.h头文件接口即可,头文件中的内容如下:(manufacturer 一般是厂商名缩写)

#define manufacturer_sal_xx() esp_hal_xx()

如果芯片平台调用的原厂SDK没有提供hal层,那么需要新增两个文件作为软件适配层,分别是:manufacturer_sal_xx.h,manufacturer_sal_xx.c;manufacturer_sal_xx.h中主要是函数声明,比如:

extern VOID manufacturer_sal_xx(VOID arg);

manufacturer_sal_xx.c中则是对原厂接口的抽象层封装,比如:

VOID manufacturer_sal_xx(VOID arg)

{
// to do
}

为什么所有芯片不对标某些厂商的manufacturer_hal_xx()接口,那么原来hal接口就可以直接使用;这里有个顾虑,主要是担心有些入参无法适配或者不好适配,或者原来接口不符合我们预期,于是单独拉个软件抽象层;

3.2 系统适配

由于目前很多WiFi芯片是基于RTOS进行应用开发,BT和ZigBee更多是基于裸机开发,那么跨平台组件就涉及到是否支持OS的适配问题,RTOS内核主要包括几大模块:线程管理,任务调度,线程通信,内存管理、时钟管理,中断管理;但是由于有些模块在裸机上实现比较复杂,考虑到当前业务场景的使用频率,暂时只实现部分OS接口适配,分为兼容性适配层和非兼容性适配层,其中裸机实现比较复杂的放到非兼容性适配层。针对OS和裸机接口需要再做一个适配层,这个适配层和上述硬件适配层的sal功能类似。

3.2.1 兼容性适配层

  • 定时器
  • 内存管理
  • 消息队列

3.2.2 非兼容性适配层

裸机实现比较复杂的OS功能放到非兼容性适配层,代码越复杂,出错的概率就越高,按照实际情况做取舍,以下内容暂时不做适配:

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
*
[外链图片转存中…(img-S1N8Cv71-1713604855635)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值