B001-Atmega16-PORTA的定义-(ques=1)

本文详细介绍了在sfr_defs.h中如何使用_SFR_IO8()宏定义Atmega16的PORTA寄存器,并解释了__SFR_OFFSET作为基地址与PORTA在寄存器文件中的偏移量如何确定物理地址。内容还提及了avr-libc的相关说明,并讨论了避免使用#define定义以提高代码可读性的方法。
摘要由CSDN通过智能技术生成
iom16.h中定义了 PORTA如下:
#define PORTA   _SFR_IO8(0x1B)

接着在sfr_defs.h中定义了_SFR_IO8()如下:

#if _SFR_ASM_COMPAT
......
#define _SFR_IO8(io_addr) ((io_addr) + __SFR_OFFSET)
#define _SFR_IO16(io_addr) ((io_addr) + __SFR_OFFSET)
......
#else  /* !_SFR_ASM_COMPAT */
......
#define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)
#define _SFR_IO16(io_addr) _MMIO_WORD((io_addr) + __SFR_OFFSET)
......
#endif /* !_SFR_ASM_COMPAT */
这个定义表示:
如果编译器( _SFR_ASM_COMPAT等于1)可以直接使用汇编、那么像 PORTA这样的变量,就是一个地址值。

此时、__SFR_OFFSETIO寄存器基地址,其值等于0x00,所以PORTA展开如下:

#define PORTA   _SFR_IO8(0x1B
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值