Author Topic: Referencing but not emitting ROM constants in C18  (Read 2940 times)

0 Members and 1 Guest are viewing this topic.

Offline gxtiTopic starter

  • Frequent Contributor
  • **
  • Posts: 507
  • Country: us
Referencing but not emitting ROM constants in C18
« on: February 18, 2012, 05:50:45 pm »
I've been working on some simple firmware for the PIC18F66J60 based on the Microchip Internet bootloader and TCP/IP stack. I've gotten everything working great, but I need a way to easily program MAC addresses. What I've done is set aside a spot in the bootloader's program space at 0xFBF0, and altered the bootloader to use that instead of the #defines it came with. No problem.

Code: [Select]
#pragma romdata BOOTMAC=0xFBF0
static far rom BYTE BootMAC[6] = {0xBE, 0xEF, 0xCA, 0xDE, 0x00, 0x00};
#pragma romdata
// ...
memcpypgm2ram((void*)MyAddress.vMAC, (far rom void*)BootMAC, sizeof(MyAddress.vMAC));

But now I want to use this same config value to set up registers in the actual application. The gist is that by having the MAC burned into the bootloader's area, I can use the bootloader to update the firmware "in the field" without overwriting the pre-programmed MAC. So first I tried using the same declaration as above, but now the .hex file contains a value for 0xFBF0 which I don't want because it belongs to the bootloader and the bootloader (rightly) refuses to program it and fails the upload. Then I tried using "extern" instead of "static", but the linker doesn't find a definition for the variable and fails. Third I tried not referencing the program memory directly and instead just reading the MAC back out of the SFR, but for some reason that came out as all zeroes. Finally I worked around the problem by having the bootloader skip over the 0xFBF0 chunk. But it's kind of ugly, and I'm curious if there's a way to solve this properly using C18. Other possibilities that I don't especially like include using assembly to copy it out, and passing it from the bootloader to the application through RAM. Any ideas?
 

Offline Short Circuit

  • Frequent Contributor
  • **
  • Posts: 439
  • Country: nl
    • White Bream electronics R&D
Re: Referencing but not emitting ROM constants in C18
« Reply #1 on: February 18, 2012, 09:24:34 pm »
Code: [Select]
#define BOOTMAC 0xFBF0

memcpypgm2ram((void*)MyAddress.vMAC, (far rom void*)BOOTMAC, sizeof(MyAddress.vMAC));
 

Offline gxtiTopic starter

  • Frequent Contributor
  • **
  • Posts: 507
  • Country: us
Re: Referencing but not emitting ROM constants in C18
« Reply #2 on: February 18, 2012, 10:41:29 pm »
Now I feel incredibly silly. Thank you, kind sir.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf