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 want to define some values in code memory with specific location. For example
code unsigned char MyArray[] _at_ 0xF000 = {0x01, 0x02};
After that, I can use "MyArray[0]" and "MyArray[1]" to access the memory at 0xF000 and 0xF001. How can I achieve this?
"Better way" means better than current programming style. i.e. {0xABCD, 0x01}. My current programming CSEG AT 0xF000 ADDR_LBYTE: DB 0xCD ADDR_HBYTE: DB 0xAB DATA_BYTE: DB 0x01
But now, I can re-write to : CSEG AT 0xF000 ADDR_: DW 0xABCD DATA_BYTE: DB 0x01
It's much friendly to programmers. I just need to change the parsing algorithm to reverse high-low byte order.
I found some guys said KeilC does not support initial values in fixed allocation. If this is true, I think I've got the best way to program my firmware.
I understand.
DW stores data of a word with the high byte first - I thought there was an equivalent to store the low byte first. Can't remember it though. Might even have been another assembler???
Maybe someone else knows it - Or can correct me.
If you want the data to be 'easy to read' in the source code, consider using macros.
"I found some guys said KeilC does not support initial values in fixed allocation."
You don't need "some guys" to tell you that - Keil themselves clearly state it in their documentation:
http://www.keil.com/support/man/docs/c51/c51_le_absvarloc.htm
"If this is true"
Yes, it does exactly what it says on the tin!
"I think I've got the best way to program my firmware."
Maybe not "best", but perfectly acceptable!