所以我已经在Atmel C编程了一段时间,我已经习惯了所有的C位操作,所以现在我想隐藏它。 我想隐藏位操作不仅是为了使我的代码更具可读性,而且还使我们的硬件更改或创建新硬件时更容易维护和修改。
所以我问你Atmel C基本引脚操作的最佳宏是什么。
我正在寻找的function是:
所以我找到了一些我可以使用的宏,但没有一个真正适合我的账单。
链接:
https://www.piconomic.co.za/fwlib/group___a_v_r___p_i_o.html (仍需要为每个引脚保留多个定义)
https://www.starlino.com/port_macro.html (不编译,AVR Studio 6.2)
在C中更改全局变量 (最好的一个,在“/ * LCD DEFINES * /”下的问题顶部附近)
我真正想要的是这样的:
#define LED1 PA1 #define BUTTON1 PB0 set_output(LED1); output_high(LED1); delay_ms(100); output_low(LED1); set_input(BUTTON1); uint8_t tmpVal = get_input(BUTTON1); if( tmpVal == 1 ) { // assuming button IS pressed here } else { // assuming button IS NOT pressed here }
有关最干净方法的任何想法吗?
我可以处理每个引脚保留更多的定义,但我觉得不应该这样做。 PA1和PB0不应该告诉我们所有内容,还是将它们定义为单个值?
编辑:在Windows上使用Atmel Studio 6.2
谢谢,Rob R.
没关系,这确实编译
// MACROS FOR EASY PIN HANDLING FOR ATMEL GCC-AVR //these macros are used indirectly by other macros , mainly for string concatination #define _SET(type,name,bit) type ## name |= _BV(bit) #define _CLEAR(type,name,bit) type ## name &= ~ _BV(bit) #define _TOGGLE(type,name,bit) type ## name ^= _BV(bit) #define _GET(type,name,bit) ((type ## name >> bit) & 1) #define _PUT(type,name,bit,value) type ## name = ( type ## name & ( ~ _BV(bit)) ) | ( ( 1 & (unsigned char)value ) << bit ) //these macros are used by end user #define OUTPUT(pin) _SET(DDR,pin) #define INPUT(pin) _CLEAR(DDR,pin) #define HIGH(pin) _SET(PORT,pin) #define LOW(pin) _CLEAR(PORT,pin) #define TOGGLE(pin) _TOGGLE(PORT,pin) #define READ(pin) _GET(PIN,pin) /* BASIC STAMPS STYLE COMMANDS FOR ATMEL GCC-AVR Usage Example: ———————————————– #define pinLed B,5 //define pins like this OUTPUT(pinLed); //typo fixed //OUTPUT(pinLED); //compiles as DDRB |= (1<<5); HIGH(pinLed); //compiles as PORTB |= (1<<5); ———————————————– */
我修复了一个错字
以上就是c/c++开发分享Atmel C Pin Manipulation宏相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/550108.html