HAL层结构 & HAL向上层提供接口

1. 基础了解:

        https://www.cnblogs.com/microliang/p/3424311.html

2.1  使用代码实现一个简单hal:

        https://blog.csdn.net/Luoshengyang/article/details/6567257

2.2   hal怎么向上层提供接口:

         https://blog.csdn.net/MyArrow/article/details/7175204

个人感觉这个人在hal层向上层提供接口的理解不够明确,我不是认同,我的理解如下图:

 

关于二级指针的一个小实验:

#include <stdio.h>
#include <stdlib.h>

typedef struct hw_device
{
	int  itself;  //表示本身最初的值
}hw_device_t;


typedef struct test_device
{
	hw_device_t common;
	int	additional;  //附加变量,通过观察此变量来判断猜想
}test_device_t;


static void test_device_open(hw_device_t** device)  
{
	test_device_t* test_device = (test_device_t*)malloc(sizeof(test_device_t));

	if (test_device != NULL)
	{
		test_device->common.itself = 50;
		test_device->additional = 50;
	}

	if (device != NULL)
	{
		*device = &(test_device->common);
	}
	//不用释放内存,等程序自己结束时释放
}

void test_init()
{
	test_device_t*  test_device = (test_device_t*)malloc(sizeof(test_device_t));
	if (test_device != NULL)
	{
		test_device->common.itself = 10;
		test_device->additional = 10;
		printf("局部变量test_device在本文件中的初始值:common.itself:%d  ; additional:%d\n", test_device->common.itself, test_device->additional);
		free(test_device); //防止内存泄漏,因为在后续的过程中指针会改变指向,那现在指向的内存就会出现内存泄漏
	}
	test_device = NULL;

	test_device_open((hw_device_t**)(&test_device));

	printf("局部变量test_device被test_device_open函数内部修改后的值:common.itself:%d  ; additional:%d\n", test_device->common.itself, test_device->additional);
}


int main()
{
	test_init();
	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
介绍 STM32CubeTM是意法半导体的一项原始计划,旨在通过减少 开发工作,时间和成本。 STM32CubeTM涵盖了STM32产品组合。 STM32CubeTM版本1.x包括: STM32CubeMX,一种图形软件配置工具,允许生成C初始化 使用图形向导编写代码。 每个系列都提供了一个全面的嵌入式软件平台(例如STM32CubeF4 STM32F4系列) STM32Cube HAL是STM32抽象层嵌入式软件,可确保最大化 跨STM32产品组合的可移植性 一套一致的中间件组件,例如RTOS,USB,TCP / IP,图形 所有嵌入式软件实用程序均附带全套示例。 HAL驱动程序层提供了一组通用的多实例简单API(应用程序编程) 接口)与上层(应用程序,库和堆栈)进行交互。它由通用组成 和扩展API。它是直接基于通用体系结构构建的,并允许构建层, 例如中间件层,以实现其功能,而无需深入了解如何使用 单片机这种结构提高了库代码的可重用性,并保证了在其他库上的轻松移植 设备。 HAL驱动程序包括一整套现成的API,可简化用户应用程序 实施。例如,通信外围设备包含用于初始化和配置的API 外设,以基于轮询管理数据传输,处理中断或DMA,以及管理 通讯错误。 HAL驱动程序API分为两类:提供通用和通用的通用API 所有STM32系列和扩展API的函数,其中包括特定的和自定义的函数 给定的家庭或零件号。 HAL驱动程序是面向功能的,而不是面向IP的。例如,计时器API分为 IP提供的功能包括以下几类:基本计时器,捕获,脉冲宽度调制 (PWM)等。 驱动程序源代码是在严格的ANSI-C中开发的,使它独立于 开发工具。使用CodeSonarTM静态分析工具进行检查。它是有据可查的,并且 符合MISRA-C 2004。 HAL驱动程序层通过检查所有输入值来实现运行时故障检测 功能。这种动态检查有助于增强固件的鲁棒性。运行时检测 也适用于用户应用程序开发和调试。 本用户手册的结构如下: HAL驱动程序概述 每个外围设备驱动程序的详细描述:配置结构,功能以及使用方法 给定的API来构建您的应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值