用C++面向对象的方法访问硬件资源

最近在开发一个基于ATMega2560的单片机系统,因为外围模块比较多,
同时也想以后开发其它板子时,能够稍微修改上一次的代码就可以适用到新板子,
查阅很多资料后,发现APM飞控就是用这样的一种思想:硬件抽象层;还有就是Android系统也使用了硬件抽象层的概念,这样的设计可以极大地提高兼容性。然而当我仔细研究APM的源码之后,我发现我找不到任何访问硬件的信息,难道C++不能直接访问硬件吗?在这里提问,希望各位师兄师姐,给位大神,牛人能够不吝赐教,小生感激不尽!在此先谢过大家了~~~

嵌入式操作系统一般都是使用宏定义来定义设备的接口地址,像我之前使用的C51单片机,根本没有操作系统,通过说明书可以了解到它的许多接口地址,这些都是生产厂商规定好的,我使用的时候都是重新用宏来定义一下(地址较少相对简单),如果是其他平台(arm板等等),建议你搜索一下其他嵌入式系统,我之前一直在用ucos-ii,这是一款专门的嵌入式操作系统,代码精简深入,用C语言写的,其中就涉及到你说的硬件操作问题,很适合你去学习,相信你看过以后问题自然就会明白了。这是ucos官网http://micrium.com/

作为单片机开发,一般都是用汇编语言比较适合,其实C或者C++也是相应编译成低级语言运行的,我理解你的想法是想把硬件控制抽象出来
这是可以做到的,一般来讲控制单片机就是使用它的不同的寄存器或者外设,这些设备都有接口地址,你在C++程序里面把这些接口地址做预编译(重新定义成自己的变量)
这样就可以在c++程序里面自由使用这些硬件设备了。

要看什么硬件,C++访问硬件要和硬件做好约定
比如说DMA设备,那么你的程序和硬件共享内存地址,那么读写硬件就如同读写一块共享内存。
再比如IO设备,相当于通讯。比如说通过串行IO发数据,收数据。

驱动程序要简洁高效,不要画蛇添足。这和编程语言里面说的面向对象没有什么关系。

只有驱动才能访问硬件。 驱动在操作系统内核中。 都是使用C和汇编来编写的,没有用C++编写的。 即使要用C++编写,也一定是不完全的C++。
因为在内核中,缺少C++的完整环境。C++本身是应用层的环境,需要一些运行时库。
因此,即使有人开发可以在内核中工作的C++,也必定是裁剪过的。
另外,我认为C比C++更加优秀,谢谢!