Re: Machine Readable Fuse Database

"Paul \"LeoNerd\" Evans" <[email protected]> Thu, 21 Jul 2016 19:15:12 +0100
Newsgroups gmane.comp.hardware.avr.gcc
Message-ID <[email protected]>
On Thu, 21 Jul 2016 22:01:40 +1000
Erik Christiansen <[email protected]> wrote:

> I wouldn't go to the trouble of a C program, but do it with a lot less
> lines of awk, but that's just taste.

That's not going to help.

E.g. on the tiny841,

#define LFUSE_DEFAULT    (FUSE_SUT_CKSEL0 & FUSE_SUT_CKSEL2 & \
  FUSE_SUT_CKSEL3 & FUSE_SUT_CKSEL4 & FUSE_CKDIV8)
#define HFUSE_DEFAULT    (FUSE_SPIEN)
#define EFUSE_DEFAULT    (0xFF)

That doesn't help directly, as you need to know the values of those
individual FUSE_* constants. OK, so they are:

#define FUSE_SUT_CKSEL0  (unsigned char)~_BV(0)
#define FUSE_SUT_CKSEL1  (unsigned char)~_BV(1)
#define FUSE_SUT_CKSEL2  (unsigned char)~_BV(2)
#define FUSE_SUT_CKSEL3  (unsigned char)~_BV(3)
#define FUSE_SUT_CKSEL4  (unsigned char)~_BV(4)
...

Alright. Um we're going to need _BV(). Except that isn't found in this
file. I'll have to follow the #include chain.

So now I need to understand how #include works. And #define.

And *then* I'm going to have to understand the ~ and & operators, along
with the << operator of _BV's actual definition.

Or; I could just generate/compile/run the following C program:

  #include <avr/io.h>
  printf("lfuse=%02x:hfuse=%02x:efuse=%02x\n",
    LFUSE_DEFAULt, HFUSE_DEFAULT, EFUSE_DEFAULT);

and out comes the answer directly without my having to do any other
work.

Big spoiler: I already wrote lots of code for doing exactly this kind
of "please get me values out of system .h files":

  https://metacpan.org/pod/ExtUtils::H2PM

So in practice I'll just be running that.

-- 
Paul "LeoNerd" Evans

[email protected]      |  https://metacpan.org/author/PEVANS
http://www.leonerd.org.uk/  |  https://www.tindie.com/stores/leonerd/

_______________________________________________
AVR-GCC-list mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/avr-gcc-list
signature.asc (application/pgp-signature, 181 B)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2

iEYEARECAAYFAleRETAACgkQvLS2TC8cBo30dgCfRl2LrvaSk+77q3DJNM+zl33Q
wj8An0B/FElfq9BvoXwoxr8y49NXqTFK
=V2OQ
-----END PGP SIGNATURE-----