ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
117923 Топик полностью
Gamma SPb (11.04.2008 13:05, просмотров: 173) ответил blackbit на На первый взгляд, у iar'а оптимизатор умней. Простой пример для pic24F:
ну, на самом деле не стоит 3,02 использовать - у него проблемы серьезные с выделением стека для локальных переменных на 3.01 у C30 с оптимизацией 0s получается так (то есть всего на два программных слова больше):
---  G:\Project\_test\dsPIC32bit\32math.c  -------------------------------------------------------
1:                 volatile unsigned char i,j,r;
2:                 
3:                 unsigned char fun1(unsigned char v1, unsigned char v2);
4:                 unsigned char fun2(unsigned char v1, unsigned char v2);
5:                 
6:                 
7:                 int main( void )
8:                 {
 0028C  781F88     mov.w 0x0010,[0x001e++]
9:                   i=1;
 0028E  B3C010     mov.b #0x1,0x0000
 00290  B7E802     mov.b 0x0000,0x0802
10:                  j=2;
 00292  B3C020     mov.b #0x2,0x0000
 00294  B7E801     mov.b 0x0000,0x0801
11:                  
12:                  r  = fun1(i,j);
 00296  208011     mov.w #0x801,0x0002
 00298  784091     mov.b [0x0002],0x0002
 0029A  BFC802     mov.b 0x0802,0x0000
 0029C  07FFF1     rcall 0x000280
 0029E  B7E800     mov.b 0x0000,0x0800
13:                  r += fun2(i,j);
 002A0  208008     mov.w #0x800,0x0010
 002A2  784418     mov.b [0x0010],0x0010
 002A4  208011     mov.w #0x801,0x0002
 002A6  784091     mov.b [0x0002],0x0002
 002A8  BFC802     mov.b 0x0802,0x0000
 002AA  07FFED     rcall 0x000286
 002AC  444400     add.b 0x0010,0x0000,0x0010
 002AE  780008     mov.w 0x0010,0x0000
 002B0  B7E800     mov.b 0x0000,0x0800
 002B2  37FFFF     bra 0x0002b2
14:                  
15:                 while(1);
16:                }
17:                
18:                unsigned char fun1(unsigned char v1, unsigned char v2)
19:                {
 00280  40C080     add.b 0x0002,0x0000,0x0002
 00282  FB8001     ze.b 0x0002,0x0000
20:                 return (++v1 + --v2);
21:                }
 00284  060000     return
22:                
23:                unsigned char fun2(unsigned char v1, unsigned char v2)
24:                {
 00286  404001     add.b 0x0000,0x0002,0x0000
 00288  FB8000     ze.b 0x0000,0x0000
25:                 return (v1 + v2);
26:                }
 0028A  060000     return