I've got an avrgcc application that uses free Flash blocks to hold user code. To maximize the space available for the user, I start this area at the beginning of the first block following my application code. To locate this, I added the following to my linker script:
--- mega32.orig 2008-10-09 17:14:10.921875000 -0600
+++ mega32.ld 2008-10-09 12:48:58.281250000 -0600
@@ -170,6 +170,10 @@
_edata = . ;
PROVIDE (__data_end = .) ;
} > data
+ /* User-programming space */
+ . = _etext + SIZEOF(.data);
+ . = ALIGN(128);
+ __user_prog_start = .;
.bss SIZEOF(.data) + ADDR(.data) :
{
PROVIDE (__bss_start = .) ;
This works great. It creates __user_prog_start at the correct location. Then, in my application, I can initialize a variable to this value with:
prog_uint8_t *VPC = (prog_uint8_t *) &__user_prog_start;
This also works great. The problem is that this user space is completely uninitialized. I need to have at least one 0xFF at this location in my .hex file to insure that uploading a new version of my code will wipe out any user code that might have been there previously.
Can anyone suggest an easy way to do this? Is there something I can add to my script to include an 0xFF at location __user_prog_start? Perhaps something I can do in one of the .c files .S files to stuff a single 0xFF there? Otherwise I'm going to have to write a program to alter the .hex file after its creation and that's awful Kludgey.
Thanks!
Gre7g