problem assigning value to global variables

Nicole Cook
Tue May 2 12:48:00 GMT 2000

Bill Pringlemeir wrote:
> More picking on Nicole...
> The line "*temp = *((unsigned long *)DATA_PORT;" should have an extra
> paren, right?  Just a typo.  Also, you have cast the DATA_PORT to an
> 'unsigned long' and the buffer is 'unsigned short'.  This can do weird
> things on the ARM depending on the model you have compiled with at the
> command line.  Ie, some ARM processors don't support LDRH, STRH and
> two LDRB or STRB instructions are generated.  Can you use an
> objdump --disassemble or generate assembler instead of an object to
> see what the code differences are?

Yeah - that's a typo.

It is intentionally putting a long into a short so that it uses
half-word mode, from what I understand.

> Calling the compiler with different arguements (or if defaults changed)
> could affect the generated code.  If volatile didn't solve the problem,
> then it is hard to guess what is causing the problem.  Seeing the generated
> code (for just this function) would help a lot.

Below is the generated code, which looks like it should be doing the
correct thing to me.

0000d204 <readSectorBuffer_short>:
    d204:	e1a0c00d 	mov	r12, sp
    d208:	e92dd800 	stmdb	sp!, {r11, r12, lr, pc}
    d20c:	e24cb004 	sub	r11, r12, #4	; 0x4
    d210:	e24dd00c 	sub	sp, sp, #12	; 0xc
    d214:	e50b0010 	str	r0, [r11, -#16]
    d218:	e51b3010 	ldr	r3, [r11, -#16]
    d21c:	e50b3014 	str	r3, [r11, -#20]
    d220:	e3a03000 	mov	r3, #0	; 0x0
    d224:	e50b3018 	str	r3, [r11, -#24]
    d228:	e51b3018 	ldr	r3, [r11, -#24]
    d22c:	e35300ff 	cmp	r3, #255	; 0xff
    d230:	da000000 	ble	d238 <readSectorBuffer_short+0x34>
    d234:	ea00000a 	b	d264 <readSectorBuffer_short+0x60>
    d238:	e51b3014 	ldr	r3, [r11, -#20]
    d23c:	e3a02302 	mov	r2, #134217728	; 0x8000000
    d240:	e1d210b0 	ldrh	r1, [r2]
    d244:	e1c310b0 	strh	r1, [r3]
    d248:	e51b3014 	ldr	r3, [r11, -#20]
    d24c:	e2832002 	add	r2, r3, #2	; 0x2
    d250:	e50b2014 	str	r2, [r11, -#20]
    d254:	e51b3018 	ldr	r3, [r11, -#24]
    d258:	e2832001 	add	r2, r3, #1	; 0x1
    d25c:	e50b2018 	str	r2, [r11, -#24]
    d260:	eafffff0 	b	d228 <readSectorBuffer_short+0x24>
    d264:	e91ba800 	ldmdb	r11, {r11, sp, pc}

More information about the crossgcc mailing list