I'm currently porting a product from a BB2 platform to a BB3. Not a big change, you'd think, but there are more "gotchas" than I'd like to see.
I have an end-of-flash function that invokes the SROM_MC(n) macro from SROM.h to allocate a pointer to _CONST_E_ (end of constant memory) and the SROM_MC_END(n) macro to return a void pointer to that location. In SROM.h, it says:
/* * Macros that create external definitions for start, length, target * address, length and bank number. The external symbol references * are resolved by the LX51 linker/Locater. */
Our console reports the following compiler and linker versions:
C51 COMPILER V9.53.0.0 - SN: K1RLC-D05I9Z ... LX51 LINKER/LOCATER V4.66.30.0 - SN: K1RLC-D05I9Z
This worked quite well for the BB2 platform. Interestingly, in the BB2 map file, it's reported as a "NUMBER", while the BB3 map file has it listed as XDATA.
I've no doubt there's a step I took in the BB2 development that I've forgotten in the BB3 porting. Could anybody give me a prompt?
The platform is a Silicon Labs Busy Bee 3 (BB3). The previous platform is a Silicon Labs Busy Bee 2 (BB2).
Have you asked Silicon Labs ... ?
Thanks for the suggestion Andrew, but the compiler and linker are Keil products. I figured it would be better to go to the source.
Interestingly, in the map file of the version that works, the variable is correctly spelt as "_const_E_". The version that fails spells it "_CONST_E_".
I've also posted the same question on the SiLabs forum here: www.silabs.com/.../bb3_unresolved_exter-1q4B
I manually added the flag "OMF2" as a "Miscellaneous flags" option, and the problem now seems to be resolved.