gpt4 book ai didi

c++ - 是否可以在 C++ 中为嵌入式平台创建新的原始类型?

转载 作者:行者123 更新时间:2023-11-28 06:09:28 26 4
gpt4 key购买 nike

我正在从头开始为 Atmel ATmega2560 芯片编写自己的 C++ 库,以此作为学习它(以及一般电子产品)工作原理的练习。作为其中的一部分,我想在 C++ 中创建一个新的基本 byte 类型,它不仅仅是另一种类型的别名,而且具有 8 位的精确大小。

由于这是一个嵌入式平台,我希望尽可能避免为芯片生成额外的指令来处理,这使得类和结构不适合。我知道我可以使用 char 类型,但是 C++ 标准对它的大小进行了模糊定义(“至少一个字节”,并且一个字节的大小可能因平台而异),而且我我不确定 AVR 平台如何对待它;尽管我怀疑 unsigned char 是 8 位的,因为大多数寄存器都是 8 位的。还有其他原因我不想使用 unsigned char

基本上,一旦我的图书馆开始运作,我想做的是:

int main()
{
/* PORTB is global object instantiated in my lib that unifies handling the Data Register and Data Direction Register for PORTB pins on the chip. PORTD is similar, just memory addresses of registers are different */
PORTB.setDDR(0); // All pins are inputs.
PORTD.setDDR(0xFF); // All pins are outputs.
byte b = PORTB.read();
b |= 0b10011000;
PORTD.write(b);

return 0;
}

能够隐式转换为 int 和其他基本类型将是一个好处,但可能不是必需的。除了 fork avr-gcc 并写入新的内部类型之外,是否有可能做到这一点?

注意:我有 ATmega2560 的完整数据表,其中包括指令集列表。如果必须的话,我不害怕使用内联汇编,但出于性能(毕竟,我只是人)和最佳实践的原因,我宁愿不使用。

我找到了 this question ,但这仍然只是别名,并且无法控制类型的实际大小。一些答案还提到使用 Boost 库;我不确定 Boost 是否适用于 AVR,我不想依赖其他库,因为这违背了我从头开始编写自己的库的目的。

最佳答案

没有。 C++ 中的所有类型要么由标准定义(“原始类型”,也包括指针和函数)、由实现定义的扩展类型 (__int128) 或用户定义的类型(类、结构、 union ).

关于c++ - 是否可以在 C++ 中为嵌入式平台创建新的原始类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31577791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com