I find myself in many situations that I should have stored an array or bunch of structures in ROM instead of RAM. Then I go through all the code and make changes like adding PROGMEM, pgm_read_word(), pgm_read_byte(). It is a hard task to do especially after writing like 4000 lines of code.
Is there a trick that could be done to do this easier?
You should look into using GCC's named address spaces feature. This feature was enabled for AVRs in GCC 4.7, so you'll have to make sure you are using GCC 4.7 or later. This will allow you to specify to the compiler what memory space your variables are in, and what memory space your pointers point to. Then you can access the variables with regular C syntax instead of using functions like pgm_read_byte
.
Note: As of GCC 4.9.2, the named address spaces are only supported in the GNU C compiler, not the C++ compiler, which the Arduino IDE uses.