I'm trying to implement broadcast writes through multiprocessor
memory on a Hammerhead Quad ADSP-21160 board.
When you are using MP memory between 2 DSPs, it's
sufficient to allocate the symbol on DSP 1 (".var Buf; global
Buf;"), declare the symbol as "extern" on DSP 2 (".extern Buf;"), and
the linker automatically adds the correct address offset to all "Buf"
references on DSP 2.
However, suppose I have a reflective semaphore on each DSP and I want
to use the broadcast write feature (in which only writes generate bus
traffic). In order to use the semaphore, I need to:
1. allocate "Semaphore" on each DSP at the same address (e.g. addr =
2. check the DSP's local copy of the semaphore
(check addr = 0x0000 5000).
3. update the value of semaphore on each DSP by writing to addr =
0x0000 5000 + 0x0070 0000).
My question is: in my code, do I need to explicitly state the
broadcast address when I write to "Semaphore," or can I convince the
linker to automatically add the offset?