私はbcm2835 RPiチップの "Device Tree Blob"を書いていますが、C++ファイルでは.dts
ファイルではなく書き込んでいます。その目的は、C++とOSの概念を実践することです。C++の内部クラスに代わって
登録アドレスだけでなく、それらにアクセスする機能をカプセル化して、API機能としてトップレベルの用途だけを公開したいと考えています。
//bcm2835.h
class BMC2835 : public ARMCpu
{
public:
void ACKLedOn(void);
void ACKLdOff(void);
void ACKLedBlink(void);
// I2C write to device (this would be called by the device driver)
// It would ensure that I2C is setup, etc, etc
void I2C_Device_Write(I2C_Device* device, uint8_t* buffer);
private:
// Physical addresses for various peripheral register sets
/// Base Physical Address of the BCM 2835 peripheral registers
const uint32_t BCM2835_PERI_BASE = 0x20000000;
class GPIO()
{
private:
/// Base Physical Address of the Pads registers
const uint32_t BCM2835_GPIO_PADS = (BCM2835_PERI_BASE + 0x100000)
/// Sets the Function Select register for the given pin, which configures
/// the pin as Input, Output or one of the 6 alternate functions.
void bcm2835_gpio_fsel(uint8_t pin, uint8_t mode);
}
class I2C()
{
private:
const uint32_t BCM2835_CORE_CLK_HZ = 250000000 ;///< 250 MHz
// Register masks for BSC_C
const uint32_t BCM2835_BSC_C_I2CEN = 0x00008000;///< I2C Enable, 0 = disabled, 1 = enabled
const uint32_t BCM2835_BSC_C_INTR = 0x00000400;///< Interrupt on RX
const uint32_t BCM2835_BSC_C_INTT = 0x00000200;///< Interrupt on TX
void bcm2835_i2c_begin(void);
void bcm2835_i2c_write(uint8_t address, uint8* pbuffer);
}
}
をそして私はまた、64ビットであり、非常に異なったため、LED扱いBCM2837のためのクラスを持つことができます。
C++
では、これはそうのように一つの大きなBCM2835クラスの内部クラスとすることもできます例。
//bcm2837.h
class BCM2837 : public ARMCpu
{
public:
// LED is now a very different Implementation with Mailbox
// but exposed to Kernel as API
void ACKLedOn(void);
void ACKLdOff(void);
void ACKLedBlink(void);
...
...
}
この方法には多くの問題があると確信しています。あなたがSPI
、UART
、などのようなものが含まれた後、単一のクラスの長さで、最も私を気にするようだ1など
ARMCpu
は、私はむしろ避けることになるだけでなくdesigendであると(100%仮想た場合でも組み込みの場合)、各CPUクラスはかなり長く、読み込みと保守が困難です。
C++でこの種のプライベートレベルのアクセスを実現する方法はありますか?
うわー、このボードはC++をサポートしていますか? – Jarkid
それは面白いです!はい? –
母、私は冗談を言っていません。私はボードのほとんどがCのみをサポートしていると思ったので...あなたの返事をありがとう。 – Jarkid