ну, на самом деле не стоит 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