2010-10-18 87 views
3

我是嵌入式编程的新手,学习它的课程。并与ATSTK600合作。如何为设备编写头文件

我正在寻找一些关于“如何为设备编写头文件”的帮助。那么,具体而言,在编写头文件(如命名寄存器等)时要遵循的标准是什么(如何创建.h包括我知道的.h)。

最近,我得到了一个任务,创建一个头文件,我做了,正在正确的轨道上,并在重新提交之前纠正一些错误。在定义USART(犯了一个错误,因为这是很新的给我)

#define USART_RX $0032 [其中教授说的是错的,因为$签署的#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作为编程语言。

+1

是否有某些原因您不想使用Atmel的头文件?他们已经非常棒了。 – 2010-10-18 23:54:41

+0

@Mark:这显然是课程作业 – 2010-10-18 23:56:46

+1

@Mark:我猜测教师正在寻求让学生完全在裸机上做一些简单的事情,而不依赖图书馆。我认为这是一个合理的方法 - 就像在一些编程类中一样,学生可能会被要求在不使用库函数的情况下实现像strcpy()或strcat()这样的东西。取决于课程的目标。 – 2010-10-19 00:13:53

回答

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高速缓存的性能受到对齐的影响(具有一些所需的内存,只有一半的高速缓存可能与完全不存在一样坏)。

+0

感谢您对PORT地址的指导,我会在文件中更正这些内容。关于字节对齐,我只是在论坛上为人们解释得很好而感谢。我应该在适当的地方张贴评论......我的不好! – sneezy 2010-10-19 07:44:29