Howdy Y'all :
I just ported some code from Keil CARM to RealView V3 (whilst RV produces way more efficient code, the whole RV toolchain seems somewhat overblown - but that's another story).
I have an outstanding issue with locating arrays and variables into a non-volatile RAM and stopping the start up library from initializing these objects (i.e. the thing one did with #pragma USERCLASS and #pragma NOINIT in CARM)
Here's what I understand :
1 - Use #pragma arm section zidata = "NVRAM" 2 - Use a scatter description file to create an execution view region located at the correct place and use the UNINIT qualifier when defining itNow, this works just fine for arrays bigger than 8 longs in size. For single variables and smaller arrays, the compiler includes them in rwdata rather than zidata (even though there is no explicit initializer in the source code)
Adding #pragma arm section rwdata = "NVRAM" to the source causes these objects to be located within the NVRAM, but still they are zeroed at start up.
At the moment my kludge is to make all my NVRAM objects big enough to find their way into zidata - if I can't find a better solution I'll try a single structure containing all my NV stuff.
Does anybody know how to a) make the compiler put all non-initialized objects (regardless of their size) in zidata or b) force rwdata objects to not be initialized ?
Thanks Gary
DOes antbody know if there's a way of achieving what the __task keyword did in CARM in RV ?