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;
}