HAL层是硬件抽象层,指的意思就是说调用该层的api是和平台无关的,在不同的平台都能调用成功。所有我们需要对不同平台的实现进行一层封装,就HAL层。以下是文件逻辑实现:
/* HAL_logic |__ HAL_logic.sh |__ HAL_logic |__ HAL_logic.vcxproj |__ main.cpp |__ print.h --------------------- 实现与平台无关 |__ print.cpp -----------------╯ |__ platform |__ linux | |__print_linux.h ------ 实现与linux平台相关 | |__print_linux.cpp ---╯ |__ windows | __print_win.h ------ 实现与win平台相关 | __print_win.cpp ---╯ print() | print_linux.h |-------->>> 合并 >>>--- print.h --->>>--- 最终只使用print.h供外部调用 print_win.h | | | out() | print() | | print()-------------| (相同功能的函数,函数名需相同,返回值也不同) print_linux.h print_win.h print.h 三者一起实现print功能 */ #include "print.h" int main(void) { print(std::string("qwe")); printa(); getchar(); return 0; } // print.h #ifndef _PRINT_H_ #define _PRINT_H_ #ifdef WIN32 #include "platform/windows/print_win.h" #else #include "platform/linux/print_linux.h" #endif void printa(void); #endif // print.cpp #include "print.h" #include <iostream> void printa(void) { std::cout << "print_all" << std::endl; } // print_win.h #ifndef _PRINT_WIN_H_ #define _PRINT_WIN_H_ #include <string> void print(std::string str); #endif // print_win.cpp #include "print_win.h" #include "windows.h" #include <iostream> #include <string> void print(std::string str) { DWORD word = 123; std::cout << "print_win : " << str << word << std::endl; } // print_linux.h #ifndef _PRINT_LINUX_H_ #define _PRINT_LINUX_H_ #include <string> void print(std::string str); #endif // print_linux.cpp #include "print_linux.h" #include <iostream> #include <string> #include <unistd.h> void print(std::string str) { std::cout << "print_linux : " << str << getpid() << std::endl; }