Цитата(Сергей Борщ @ Mar 31 2007, 12:24)

P.S. Ветка как-то плавно уползла от AVR к ARM, но описанная проблема относится ко всем IAR, с которыми работал.
Да нету проблемы. Использую постоянно. Ниже первый попавшийся кусок, где дважды используется пустышка. Командная строка и листинг прилагаются.
Код
//////////////////////////////////////////////////////////////////////////////
// /
// IAR ARM ANSI C/C++ Compiler V4.41A/W32 27/Mar/2007 19:41:57 /
// Copyright 1999-2005 IAR Systems. All rights reserved. /
// /
// Cpu mode = arm /
// Endian = little /
// Stack alignment = 4 /
// Source file = D:\ARM_WORK\pcmu\MAIN\SPI.C /
// Command line = D:\ARM_WORK\pcmu\MAIN\SPI.C -D LPC2000_IAR -lC /
// D:\ARM_WORK\pcmu\Works\List\ -lA /
// D:\ARM_WORK\pcmu\Works\List\ --remarks -o /
// D:\ARM_WORK\pcmu\Works\Obj\ -s9 --debug --cpu_mode /
// arm --endian little --cpu ARM7TDMI-S --stack_align /
// 4 --warnings_affect_exit_code /
// --no_path_in_file_macros -e --require_prototypes /
// --fpu None --dlib_config "D:\IAR\Embedded /
// Workbench\arm\LIB\dl4tpannl8n.h" -I /
// D:\ARM_WORK\pcmu\..\COMMON\RTOS\portable\IAR\LPC200 /
// 0\ -I D:\ARM_WORK\pcmu\..\COMMON\RTOS\include\ -I /
// D:\ARM_WORK\pcmu\..\COMMON\include\ -I /
// D:\ARM_WORK\pcmu\MAIN\include\ -I "D:\IAR\Embedded /
// Workbench\arm\INC\" --inline_threshold=2 /
// List file = D:\ARM_WORK\pcmu\Works\List\SPI.s79 /
// /
// /
//////////////////////////////////////////////////////////////////////////////
....
RSEG CODE:CODE:NOROOT(2)
CFI Block cfiBlock7 Using cfiCommon0
CFI Function fpga_switch
ARM
// int fpga_switch( WORD data, WORD addr )
// {
// ulong value = ( 0x9C0000>>(8+2) );
// int ret_data;
// value |= (addr>>8)|((addr&0x1F)<<3);
// value <<= 8;
// value |= (data>>8)|((data&0x1F)<<3);
// value <<= 2;
fpga_switch:
LSR R2,R1,#+8
AND R1,R1,#0x1F
ORR R1,R2,R1, LSL #+3
ORR R1,R1,#0x2700
LSR R2,R0,#+8
AND R0,R0,#0x1F
ORR R0,R2,R0, LSL #+3
ORR R0,R0,R1, LSL #+8
LSL R1,R0,#+2
// IO0CLR = P0B_SEL_FPGA; // Select(soft)
MOV R0,#-536870908
ORR R0,R0,#0x28000
MOV R2,#+268435456
ORR R2,R2,#0x1000
STR R2,[R0, #+8]
// SSPDR = value>>16;
MOV R3,#-536870904
ORR R3,R3,#0x68000
LSR R12,R1,#+16
STR R12,[R3, #+0]
// IO0SET = P0B_SEL_FPGA; // Unselect
STR R2,[R0, #+0]
// while( !(SSPSR & SSPSR_RNE) );
??fpga_switch_0:
LDR R0,[R3, #+4]
TST R0,#0x4
BEQ ??fpga_switch_0
// ret_data = SSPDR;
LDR R0,[R3, #+0]
// SSPDR = value>>8;
LSR R2,R1,#+8
STR R2,[R3, #+0]
// while( !(SSPSR & SSPSR_RNE) );
??fpga_switch_1:
LDR R2,[R3, #+4]
TST R2,#0x4
BEQ ??fpga_switch_1
// SSPDR;
LDR R2,[R3, #+0]
// SSPDR = value;
STR R1,[R3, #+0]
// while( !(SSPSR & SSPSR_RNE) );
??fpga_switch_2:
LDR R1,[R3, #+4]
TST R1,#0x4
BEQ ??fpga_switch_2
// SSPDR;
LDR R1,[R3, #+0]
// return( ret_data );
MOV PC,LR ;; return
CFI EndBlock cfiBlock7
// }