我是嵌入式编程的新手,参加了它的课程。并与ATSTK600合作。
我正在寻找一些关于“如何为设备编写头文件”的帮助。好吧,具体来说,在编写头文件时要遵循的标准是什么,例如命名寄存器等(如何创建.h& include,我知道)。
最近,我得到了一个创建头文件的任务,我做了,在正确的轨道上有一些错误需要在重新提交之前得到纠正。在定义USART时(犯了一个错误,因为这对我来说很新)
#define USART_RX $0032
[教授说错误是因为$ sign #define不起作用]。以下定义是否正确?
#define USART0_RX 32
#define USART0_UDRE 34
#define USART0_TX 36
另一件事是我将端口定义如下,这是正确的命名约定吗?
#define I_PINS_PORTA 0x20
#define DD_PORTA 0x21
#define DATA_PORTA 0x22
好吧,我在某处读到了正确的命名约定 #define BASE_ADDR_PORTA 0x20
,但接下来应该用于DD_PORTA
& I_PINS_PORTA
?
我正在网上寻找一些帮助。来到这个论坛。
P.S。 AM使用C作为编程语言。
答案 0 :(得分:2)
您似乎遵循UART的一个惯例,但不是PORTA,是将系统名称放在名称的开头。它可以更容易地发现代码。所以而不是
#define DD_PORTA 0x21
你可能有
#define PORTA_DD 0x21
对跨越寄存器区域的设备使用基地址也是一个好主意。为此,您将拥有:
#define PORTA_BASE 0x20
#define PORT_I 0x00
#define PORT_DD 0x01
#define PORT_DATA 0x02
#define PORTA_I (PORTA_BASE + PORT_I)
#define PORTA_DD (PORTA_BASE + PORT_DD)
#define PORTA_DATA (PORTA_BASE + PORT_DATA)
这最终会更多地打字,但它可以帮助您避免以后的错误。
不同的人和公司对如何命名这些内容及其界面有自己的偏好,因此没有完美的答案。
就字节对齐而言 - 我不确定你在问什么。内存地址的对齐与地址的其余部分除以对齐大小(以字节为单位)为0.许多系统只能加载和存储在可被2,4或8整除的地址(或者这样做)更快地满足要求的地址)。此外,CPU高速缓存性能受到对齐的影响(在高速缓存中只有一半所需的内存可能与完全没有它一样糟糕。)
答案 1 :(得分:0)
这类似于几天前在#define vs. enums for addressing peripherals提出的问题。我认为接受的答案是定义嵌入式设备接口的最佳方法。我还建议阅读该答案中引用的Dan Saks column。