如果C语言没有类,我有什么选择OOP?



这是对:C语言,提供指向类的函数指针,并让类在main()

上面操作函数我有一个微芯片Fubarino/PIC32MX250F128D

我想学习如何,因为C语言没有类,我能做什么呢?但我想的是这样的:一个对象,我传递外围设备的指针和它的属性寄存器,如PORTA, LATA, PORTB, LATB, PORTC, LATC和存储一些时间戳按钮,led。

该芯片还具有2 x UART, 2 x I²C和2 x SPI。

我使用的是SSD1306 OLED屏幕,但我的白板上有2个,每个都使用自己的I²C端口。我试过使用"开关"。在2个显示器的代码中,但不知何故,使具有随机像素的行出现在显示器的第一行并将图像向下移动一行而不改变原始代码,接受使用switch语句在I²C1和I²C2之间寻址,相同的代码。

为了防止大量相同的代码或重复的代码难以维护或跟踪,c++提供了整洁的类,甚至结构也可以用作类。

我可以让指针指向外设

volatile unsigned short *address_i2c1 = &I2C1STAT; // I²C MCU register / real hardware.
union {
unsigned short byte;
// a structure with 8 single bit bit-field objects, overlapping the union member "byte"
struct {
unsigned jumble: 14;
unsigned TRSTAT: 1;
unsigned remainder: 1;
};
} byte_u;

void I2CSend(char data) {
// code block
I2C1TRN = data;  
//while (I2C1STATbits.TRSTAT == 1) // original Microchip code
//while(I2C1STAT & (1 << 14)); // an alternative aproach / test
//while(I2C1STAT & 0b100000000000000); // a faster alternative aproach

// OOP method?
do {
byte_u.byte = *address_i2c1;
}
while (byte_u.TRSTAT);  
if (I2C1STATbits.ACKSTAT) {
//Report that we did not receive a NAK. Abort and send STOP.
//Serial.println("I²C error");
} else {
//Serial.println("I²C ok");
}
}

我有什么选择?

https://www.cs.rit.edu/~ats/books/ooc.pdf是一个关于如何在ANSI c中进行OOP的重要资源。结构体、指针和函数指针的使用是关键。本书包含了清晰的示例,但完整的代码可以在GitHub上获得,例如:https://github.com/shichao-an/ooc.

我应该提一下,这个问题可能是本网站上已经回答的其他类似问题的重复,正如在帖子的评论中提到的。

最新更新