Ответ: MSP c включенной оптимизацией по скорости High, code motion выключен. Пришлось разбить на 2 файла, иначе оптимизатор съедал вызовы функций в main()
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено _VAI 18 августа 2004 г. 14:44
В ответ на: MSP отправлено lamerok 18 августа 2004 г. 13:41







##############################################################################
# #
# IAR MSP430 C/C++ Compiler V3.20A/W32 [Evaluation] 18/Aug/2004 15:38:18 #
# Copyright 1996-2004 IAR Systems. All rights reserved. #
# #
# __rt_version = 2 #
# __double_size = 32 #
# __reg_r4 = free #
# __reg_r5 = free #
# __pic = no #
# __core = 64kb #
# Source file = F:\MSP430\Test\test\c.c #
# Command line = -I "C:\Compil\IAR Embedded Workbench 4.0\430\INC\" -I #
# "C:\Compil\IAR Embedded Workbench 4.0\430\INC\CLIB\" #
# -lCN F:\MSP430\Test\test\Release\List\ -o #
# F:\MSP430\Test\test\Release\Obj\ -s9 --no_code_motion #
# -e --double=32 F:\MSP430\Test\test\c.c #
# List file = F:\MSP430\Test\test\Release\List\c.lst #
# Object file = F:\MSP430\Test\test\Release\Obj\c.r43 #
# #
# #
##############################################################################

F:\MSP430\Test\test\c.c
1
2 #include
3
4
5 short test( char* src );
6 short badtest( char* packet );
7

\ In segment CODE, align 2
8 void main()
\ main:
9 {
\ 000000 0A12 PUSH.W R10
\ 000002 2183 SUB.W #0x2, SP
10 char buf[ 2 ];
11 short result, badresult;
12 *(short*)buf = 0x1234;
\ 000004 B14034120000 MOV.W #0x1234, 0x0(SP)
13 while( 1 )
14 {
15 result = test( buf );
\ ??main_0:
\ 00000A 0C41 MOV.W SP, R12
\ 00000C B012.... CALL #test
\ 000010 0A4C MOV.W R12, R10
16 badresult = badtest( buf );
17 if( result != badresult )
\ 000012 0C41 MOV.W SP, R12
\ 000014 B012.... CALL #badtest
\ 000018 0A9C CMP.W R12, R10
\ 00001A F727 JEQ ??main_0
18 break;
19 }
20 error:
21 goto error;
\ ??main_1:
\ 00001C FF3F JMP ??main_1
22 }

Maximum stack usage in bytes:

Function CSTACK
-------- ------
main 6
-> test 6
-> badtest 6


Segment part sizes:

Function/Label Bytes
-------------- -----
main 30


30 bytes in segment CODE

30 bytes of CODE memory

Errors: none
Warnings: none

##############################################################################
# #
# IAR MSP430 C/C++ Compiler V3.20A/W32 [Evaluation] 18/Aug/2004 15:38:18 #
# Copyright 1996-2004 IAR Systems. All rights reserved. #
# #
# __rt_version = 2 #
# __double_size = 32 #
# __reg_r4 = free #
# __reg_r5 = free #
# __pic = no #
# __core = 64kb #
# Source file = F:\MSP430\Test\test\cc.c #
# Command line = -I "C:\Compil\IAR Embedded Workbench 4.0\430\INC\" -I #
# "C:\Compil\IAR Embedded Workbench 4.0\430\INC\CLIB\" #
# -lCN F:\MSP430\Test\test\Release\List\ -o #
# F:\MSP430\Test\test\Release\Obj\ -s9 --no_code_motion #
# -e --double=32 F:\MSP430\Test\test\cc.c #
# List file = F:\MSP430\Test\test\Release\List\cc.lst #
# Object file = F:\MSP430\Test\test\Release\Obj\cc.r43 #
# #
# #
##############################################################################

F:\MSP430\Test\test\cc.c
1
2 #include
3
4

\ In segment CODE, align 2
5 short test( char* src )
\ test:
6 {
7 short result = *( short* )src;
8 return result;
\ 000000 2C4C MOV.W @R12, R12
\ 000002 3041 RET
9 }
10

\ In segment CODE, align 2
11 short badtest( char* packet )
\ badtest:
12 {
13 short result = packet[0] | (((signed char)packet[1])<<8);
14 return result;
\ 000000 6F4C MOV.B @R12, R15
\ 000002 5E4C0100 MOV.B 0x1(R12), R14
\ 000006 8E10 SWPB R14
\ 000008 0FDE BIS.W R14, R15
\ 00000A 0C4F MOV.W R15, R12
\ 00000C 3041 RET
15 }

Maximum stack usage in bytes:

Function CSTACK
-------- ------
badtest 2
test 2


Segment part sizes:

Function/Label Bytes
-------------- -----
test 4
badtest 14


18 bytes in segment CODE

18 bytes of CODE memory

Errors: none
Warnings: none








Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru