加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在嵌入代码和非嵌入代码之间维护单个代码库

发布时间:2020-12-16 10:00:47 所属栏目:百科 来源:网络整理
导读:我正在研究一个涉及微控制器编程的机器人研究项目.我希望能够在最大程度上将测试软件与测试硬件进行分离.这既是为了提高开发速度,也是为了在将代码放到机器人上之前,我可以更轻松地对代码进行单元测试/模拟.例如,我可能会写一个“MyRobot”库.然后我可以在嵌
我正在研究一个涉及微控制器编程的机器人研究项目.我希望能够在最大程度上将测试软件与测试硬件进行分离.这既是为了提高开发速度,也是为了在将代码放到机器人上之前,我可以更轻松地对代码进行单元测试/模拟.例如,我可能会写一个“MyRobot”库.然后我可以在嵌入代码和非嵌入式模拟/测试代码中包含这个库.在运行时,我会提供函数指针,这些函数指针可以读取(在嵌入式情况下)或模拟(在模拟中)传感器数据并将其提供到库中.

因此,我需要做的就是在编译时生成两个库:一个用于嵌入式代码,另一个用于非嵌入式代码.

我的问题是这是否可行/如果有更好的方法可行/如果有任何问题我应该注意.

提前致谢!

解决方法

这是嵌入式系统开发中的常见情况,您创建两个库的方法通常是推荐的解决方案.将嵌入式系统固件中的低级硬件与软件分离是一种最佳实践.

您提到的库通常称为“硬件抽象层”或HAL. HAL的API(应用程序编程接口)可以在名为hal.h的单个头文件中提供.软件中需要访问硬件的每个源模块都会在源文件的顶部显示以下行:

#include "hal.h"

像这样设计系统的好处包括:

>模块化.如果需要更改时序,例如读取传感器的UART或SPI接口,即使代码中有多个位置读取该传感器,您也只需要更改HAL库.
>便携性.如果以后需要将项目迁移到其他微控制器,则只需要更改HAL层.
>封装.硬件的细节隐藏在HAL层中,这允许您的其他软件在更高的抽象级别上运行.如果您使用的是微控制器制造商提供的设备库,它提供寄存器,I / O端口等的地址,您可以在HAL库中封装对此库的引用,以便您的应用程序代码不需要知道它.
>可测试性.这是您问题的主要焦点.您可以编写可以在不同平台(例如Windows)上运行的特殊版本的HAL层,以测试您的应用程序软件.这个特殊版本不需要包含微控制器制造商提供的器件库,因为当您在测试环境中运行时,微控制器不存在,因此其寄存器和I / O端口不需要通过你的软件.

对于您的两个场景,如您所建议的那样,您将创建两个版本的HAL库:包含在嵌入式硬件上运行的代码的标准版本,以及模拟硬件的模拟版本,用于在控制方式.您可以将标准库命名为hal.lib(可能具有不同的扩展名,具体取决于您的开发环境),以及模拟库hal_simulated.lib.两者都具有相同的接口,如hal.h中所述.也就是说,两个库都包含hal.h中声明的所有函数,例如void halInit(),int halReadProximitySensor()等.

假设您的IDE支持发布和调试配置,您可以为名为SW_Test的软件测试创建第三个配置.此配置将与Debug配置重复,但hal_simulated.lib将链接到项目而不是标准hal.lib.

也可以看看

Hardware Abstraction (Wikipedia)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读