Dear All. I have updated the first version of the static initialization of gpio pins https://github.com/supramaterial/Runtime/commit/07010e358af103738f19bbdad2583439a3dfbca1 I tested just a little with PWM. The present version simply sets all the pins to reset value (except A, that has some registers with reset value different than 0) Pekka: please tell me what do think about it. I will continue testing other pins. With Warm Regards, Ivan Raul On Fri, Jan 31, 2014 at 3:29 PM, Ivan Raul <supra.material@xxxxxxxxx> wrote: > Dear Pekka. > > I'm having a little problem with the designated initializers, I mean: > > #ifdef __cplusplus > # define D32(p, r, v) { v } > #else > # ifndef offsetof > # define offsetof(st, m) ((uint32_t)(&((st *)0)->m)) > # endif > # define D32(p, r, v) [offsetof(p, r)/sizeof(uint32_t)] = { v } > #endif > > As they are not supported in C++, my initial idea was to simply insert the > missing registers in between to simply use D32 homogeneously. > > Do you know of any other alternative for the designated initializers in > C++? > > Thank you in advance for your reply > > With Warm Regards, Ivan Raul > > > On Fri, Jan 31, 2014 at 12:05 PM, Ivan Raul <supra.material@xxxxxxxxx>wrote: > >> And you're completely right. A very important mental note written today :) >> >> Thank you very much >> >> I'll keep you posted >> >> With Warm Regards, Ivan Raul >> >> >> On Fri, Jan 31, 2014 at 11:45 AM, Pekka Nikander >> <pekka.nikander@xxxxxx>wrote: >> >>> > What would be your initial guess about it, why it is not considering >>> > __GPIO ## port ## _PIN0_MODE >>> > to be a constant, even when they are declared as static const. >>> >>> Looking at your code, the expression is essentially defined as >>> >>> static const uint32_t __GPIO ## port ## _PIN ## pin ## _MODE = >>> GPIO_MODER_MODER0_ ## mode << (pin * 2); >>> >>> Now, while that is a compile-time constant, IIRC it is not a constant >>> expression by C89/C99 or even C11 rules: >>> >>> >>> http://bytes.com/topic/c/answers/663536-c99-does-const-int-x-5-make-x-constant-expression >>> >>> http://stackoverflow.com/questions/12343027/const-keyword-and-constant-expressions-in-c99-and-c11 >>> >>> Most probably the easiest way is to rename ellduino_gpio.c to >>> ellduino_gpio.cpp and try again. IIRC C++11 should compile it just fine, >>> but I may be wrong. >>> >>> --Pekka >>> >>> >>> >> >