30 April 2014, 21:14 UTC
So I've been working on something. I've only looked at assembler output so far, but it looks right and promising.
Towards fast I/O in Arduino for AVRs
So I've been working on something. I've only looked at assembler output so far, but it looks right and promising.
Basically, I'd like to let you name I/O pins via typedef, then efficiently read and write the pins. And I'd like to make Arduino's digitalWrite just as efficient when the pin argument is a constant.
All instruction counts are in Debian Wheezy's avr-gcc version 4.7.2 with -mmcu=atmega328p -Os specified on the commandline.
// You can declare ports (they use zero RAM) typedef IOPIN<PORT_B, 0> iob0; typedef IOPIN<PORT_B, 1> iob1; typedef OCPIN<PORT_B, 1, true> ocb1; // emulate an open collector port // .. and use them efficiently (instruction counts never include ret) int en() { iob0::output(); } // 1 instruction int fn() { iob0::toggle(); } // 1 instruction int gn() { ocb1::set(); } // 2 instructions int hn() { ocb1::clear(); } // 2 instructions int jn(bool b) { iob0::write(b); } // 5 instructions int kn() { iob0::write(1); } // 1 instruction // you can use fastDigitalWrite just like digitalWrite (but faster and inline) int c(int i) { fastDigitalWrite(1, i); } // 5 instructions int d() { fastDigitalWrite(1, 1); } // 1 instruction // these have a variable port so they still turn into calls to digitalWrite int a(int i, int j) { fastDigitalWrite(i, j); } int b(int i) { fastDigitalWrite(i, 1); }
Files currently attached to this page:
fast_io_prototype.cpp | 6.2kB |
27 December 2011, 20:35 UTC
I've been playing with clang because I'd like to use its static analyzer on the code at $DAY_JOB. Unfortunately, it frequently bombs while building our code. Fortunately, many of the bombs are due to our bugs, not theirs. Here's one example:
It's gratifying when the compiler is right
I've been playing with clang because I'd like to use its static analyzer on the code at $DAY_JOB. Unfortunately, it frequently bombs while building our code. Fortunately, many of the bombs are due to our bugs, not theirs. Here's one example:
All older entries
Website Copyright © 2004-2024 Jeff Epler