|
@ -121,3 +121,16 @@ inline void serial_delay(const millis_t ms) { |
|
|
#endif |
|
|
#endif |
|
|
|
|
|
|
|
|
void print_bin(const uint16_t val); |
|
|
void print_bin(const uint16_t val); |
|
|
|
|
|
|
|
|
|
|
|
template<typename T> |
|
|
|
|
|
class restorer { |
|
|
|
|
|
T& ref_; |
|
|
|
|
|
T val_; |
|
|
|
|
|
public: |
|
|
|
|
|
restorer(T& perm) : ref_(perm), val_(perm) {} |
|
|
|
|
|
~restorer() { restore(); } |
|
|
|
|
|
inline void restore() { ref_ = val_; } |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
#define REMEMBER(X) restorer<typeof(X)> X##_restorer(X) |
|
|
|
|
|
#define RESTORE(X) X##_restorer.restore() |
|
|