We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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?
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.