Прерывания в ARM-GCC (или опять LPC)

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Привет Gerasimov!

17 Jan 06 13:02, Gerasimov Gerasim писал Eugene Markov:

 GG> Hе получилось, зато получилось с листингом, добавил
 GG> -Wa,-ahlns=$(<:.c=.lst)при компиляции, однако (h) include high-level
 GG> source так и не получил (так понимаю строки ассемблера должны
 GG> предварять строки сишного исходника), странно почему?

    Позвонил отдыхающему на Тенерифе знакомому телепату (т.к. ты не указал всю
строку запуска gcc). Он думает, что ты забыл указать -g.

 GG> ;-)

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... В системе возможно бесконечное число процессов - до 256.

Прерывания в ARM-GCC (или опять LPC)
 GG>> Hе получилось, зато получилось с листингом, добавил
 GG>> -Wa,-ahlns=$(<:.c=.lst)при компиляции, однако (h) include high-level
 GG>> source так и не получил (так понимаю строки ассемблера должны
 GG>> предварять строки сишного исходника), странно почему?

 AM>     Позвонил отдыхающему на Тенерифе знакомому телепату (т.к. ты не
 AM> указал всю строку запуска gcc). Он думает, что ты забыл указать -g.
Во истину телепат :-)

Вот мейкфайл, я его писал не сам, только дополняю по мере необходимости

NAME   = uart_test

CC      = arm-elf-gcc
LD      = arm-elf-ld -v
AR      = arm-elf-ar
AS      = arm-elf-as
CP      = arm-elf-objcopy
OD    = arm-elf-objdump

CFLAGS  = -I./ -с -fno-common -O3 -Wa,-ahls=$(<:.c=.lst)
AFLAGS  = -ahls -mapcs-32 -o
LFLAGS  = -Map main.map -Tflash.cmd
CPFLAGS = -O ihex -Wa,-adhlns=$(<:.c=.lst)
ODFLAGS    = -dStl -x --syms -S

all: test

clean:
    -rm crt.lst main.lst crt.o main.o main.out main.hex main.map main.dmp

test: main.out
    @ echo "...copying"
    $(CP) $(CPFLAGS) main.out main.hex
    $(OD) $(ODFLAGS) main.out > main.dmp

main.out: crt.o VIClowlevel.o main.o flash.cmd
    @ echo "..linking"
    $(LD) $(LFLAGS) -o main.out crt.o VIClowlevel.o main.o

VIClowlevel.o: VIClowlevel.c
    @ echo ".compiling"
    $(CC) $(CFLAGS) VIClowlevel.c

crt.o: crt.s
    @ echo ".assembling"
    $(AS) $(AFLAGS) crt.o crt.s > crt.lst

main.o: main.c
    @ echo ".compiling"
    $(CC) $(CFLAGS) main.c > main.lst

Так вот, если в строке CFLAGS  = -I./ -с -fno-common -O3
-Wa,-ahls=$(<:.c=.lst)
заменить -с на -g то вываливает ошибка
arm-elf-gcc -I./ -g -fno-common -O3 -Wa,-ahls=main.lst main.c > main.lst
/usr/local/lib/gcc/arm-elf/3.4.0-macraigor1/../../../../arm-elf/bin/ld:
crt0.o:
No such file: No such file or directory
collect2: ld returned 1 exit status
make: *** [main.o] Error 1
но листинг всётаким успевает появится, и там есть ссылки на номера строк
исходников в виде
 233                      .loc 1 59 0
 234 0114 CCC09FE5         ldr    ip, .L14
 235 0118 00009CE5         ldr    r0, [ip, #0]
 236 011c 002090E5         ldr    r2, [r0, #0]
 237 0120 0238C2E3         bic    r3, r2, #131072
 238 0124 01E883E3         orr    lr, r3, #65536
 239 0128 00E080E5         str    lr, [r0, #0]
 240                      .loc 1 62 0
 241 012c B8E09FE5         ldr    lr, .L14+4
 ............

А я то хочу увидить листинг вот в таком виде:
***  _PINSEL0->P0_8 = 1; // P0.8 to TX1
***  _PINSEL0->P0_9 = 1; // P0.9 to RX1
 234 0114 CCC09FE5         ldr    ip, .L14
 235 0118 00009CE5         ldr    r0, [ip, #0]
 236 011c 002090E5         ldr    r2, [r0, #0]
 237 0120 0238C2E3         bic    r3, r2, #131072
 238 0124 01E883E3         orr    lr, r3, #65536
 239 0128 00E080E5         str    lr, [r0, #0]
***   uart1->DLM_IER.dIER       = 0x00; // disable all interrupts
 241 012c B8E09FE5         ldr    lr, .L14+4
 ........
Но как такого добиться?

;-)


Re: Прерывания в ARM-GCC (или опять LPC)
Привет Gerasimov!

18 Jan 06 08:12, Gerasimov Gerasim писал Alex Mogilnikov:

 GG> Так вот, если в строке CFLAGS  = -I./ -с -fno-common -O3
 GG> -Wa,-ahls=$(<:.c=.lst)
 GG> заменить -с на -g то вываливает ошибка

    И это логично, если посмотреть описание этих опций. Убирание -c приводит к
тому, что после ассемблирования выполняется линковка. Очевидно, это совсем не
то, что тебе надо. Hе убирай -c при добавлении -g, и наступит рулез. :)

 GG> arm-elf-gcc -I./ -g -fno-common -O3 -Wa,-ahls=main.lst main.c >
 GG> main.lst

    Зачем ты перенаправляешь вывод в main.lst? Это не только не нужно, но и
вредно. Ассемблерной опции -ahls=main.lst вполне достаточно чтобы ассемблер сам
создал main.lst.

 GG>  но листинг всётаким успевает появится,

    Тоже логично, ибо листинг создается ассемблером. Разберись-таки, какая
программа что делает.

 GG> А я то хочу увидить листинг вот в таком виде:
 GG>  ........
 GG> Hо как такого добиться?

alx% cat test.c
int x;
char y;

int fff(void)
{
    if(x < 10)
        y = x + '0';
    else
        y = x + 'a';
}
alx% arm-elf-gcc -I./ -c -g -fno-common -O3 -Wa,-ahls=test.lst test.c
alx% cat test.lst
ARM GAS  /var/tmp//ccvOdLkN.s                   page 1


   1                            .file   "test.c"
   2                            .section        .debug_abbrev,"",%progbits
   3                    .Ldebug_abbrev0:
   4                            .section        .debug_info,"",%progbits
   5                    .Ldebug_info0:
   6                            .section        .debug_line,"",%progbits
   7                    .Ldebug_line0:
   8 0000 34000000              .text
   8      02001A00
   8      00000201
   8      FB0E0A00
   8      01010101
   9                    .Ltext0:
  10                            .align  2
  11                            .global fff
  12                            .type   fff, %function
  13                    fff:
  14                    .LFB2:
  15                            .file 1 "test.c"
   1:test.c        **** int x;
   2:test.c        **** char y;
   3:test.c        ****
   4:test.c        **** int fff(void)
   5:test.c        **** {
  16                            .loc 1 5 0
  17                            @ args = 0, pretend = 0, frame = 0
  18                            @ frame_needed = 0, uses_anonymous_args = 0
  19                            @ link register save eliminated.
   6:test.c        ****     if(x < 10)
  20                            .loc 1 6 0
  21 0000 24109FE5              ldr     r1, .L5
  22 0004 003091E5              ldr     r3, [r1, #0]
  23 0008 090053E3              cmp     r3, #9
   7:test.c        ****         y = x + '0';
  24                            .loc 1 7 0
  25 000c 302083E2              add     r2, r3, #48
   8:test.c        ****     else
   9:test.c        ****         y = x + 'a';
  26                            .loc 1 9 0
  27 0010 611083E2              add     r1, r3, #97
  28                            .loc 1 7 0
  29 0014 14309FD5              ldrle   r3, .L5+4
  30                            .loc 1 5 0
  31                            @ lr needed for prologue
  32                            .loc 1 7 0
  33 0018 0020C3D5              strleb  r2, [r3, #0]
  34                            .loc 1 6 0
  35 001c 0EF0A0D1              movle   pc, lr
  36                            .loc 1 9 0
  37 0020 08009FE5              ldr     r0, .L5+4
  38 0024 0010C0E5              strb    r1, [r0, #0]
  10:test.c        **** }
  39                            .loc 1 10 0
  40 0028 0EF0A0E1              mov     pc, lr

    [ далее поскипано ]

 GG> ;-)

    Кстати, какая у тебя версия ассемблера?

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Собака - вдруг человека...

Прерывания в ARM-GCC (или опять LPC)
 AM> Hе убирай -c при добавлении -g, и наступит рулез. :)
 AM> alx% arm-elf-gcc -I./ -c -g -fno-common -O3 -Wa,-ahls=test.lst test.c
Сделал всё как доктор прописал, поначалу даже обрадывался Yes!!!, но полностью
просмотрев листинг обнаружил, что комментарии из строк сишного исходника
вставлены всего в три функции (причём мелких и не интересных), а их в
исходнике с десяток, и та которая которая глючит представлена в неудобоваримом
виде: номер строки в исходнике и ассемблерный текст, приходится два окна
открывать, в одном исходник - в другом листинг, это же неудобно :-(

 AM>     Кстати, какая у тебя версия ассемблера?
GNU assembler 2.15

;-)


Re: Прерывания в ARM-GCC (или опять LPC)
 EM> А это кстати, не результат оптимизации (-O3)?
 EM> Ассемблерный код может принимать весьма причудливые формы :)
 EM> и становится непонятно к какому месту приткнуть исходный текст.

Так и есть, убрал оптимизацию - получил путёвый листинг!
Всем спасибо.

С уважением, Герасимов.

ЗЫ ...но воросы по gcc ещё будут

Замути хитовый расколбас


Re: Прерывания в ARM-GCC (или опять LPC)
Привет, Gerasimov !


 17 Jan 06 , 13:02  Gerasimov Gerasim писал к Eugene Markov:

EM>>  objdump -dStl твой.elf

GG> Hе получилось, зато получилось с листингом, добавил
GG> -Wa,-ahlns=$(<:.c=.lst)при компиляции, однако (h) include high-level
GG> source так и не получил (так понимаю строки ассемблера должны
GG> предварять строки сишного исходника), странно почему?

GG> ;-)

Hаверное при компиляции деба-g инфу не производил? :)

.                                            С уважением, Hикита.
icq:240059686, lj-user:nicka_startcev
... купается с круглыми утками

Re: Прерывания в ARM-GCC (или опять LPC)
Hi!

writes:

NAS> EM>>  objdump -dStl твой.elf
NAS>
NAS> GG> Hе получилось, зато получилось с листингом, добавил
NAS> GG> -Wa,-ahlns=$(<:.c=.lst)при компиляции, однако (h) include high-level
NAS> GG> source так и не получил (так понимаю строки ассемблера должны
NAS> GG> предварять строки сишного исходника), странно почему?
NAS>
NAS> GG> ;-)
NAS>
NAS> Hаверное при компиляции деба-g инфу не производил? :)

Hаверно.

objdump - из ARM toolchain-а?

Вот мой Makefile для mcpgcc (с APM не работал)
в листинге (superpuper.l43) есть все, включая сишные комментарии
и абсолютные адреса.


- ---8<------8<------8<------8<------8<------8<------8<------8<---

NAME            = superpuper
CPU             = msp430x147

#ADD_FLAGS       = -D GDB_DEBUG
#ADD_FLAGS       = -D WDT_ON_MODE -D GDB_DEBUG
ADD_FLAGS       = -D WDT_ON_MODE

ASFLAGS         = -mmcu=$ -D_GNU_ASSEMBLER_ $ -Wa,-gstabs -g
CFLAGS          = -mmcu=$ -O2 -Wall -g $
#CFLAGS          = -mmcu=$ -S

# switch the compiler (for the internal make rules)
CC          = msp430-gcc
AS          = msp430-gcc
EMACS          = c:/gnu/emacs-20.7/bin/emacs.exe

CLEANEXTS    := *.bak *.tmp *.o *.d *.elf *.a43 *.l43 *.s

sources    = $(wildcard *.c) $(wildcard *.S)
objects    = $(addsuffix .o,$(basename $(sources)))
depends    = $(objects:.o=.d)


.PHONY: all clean download download-jtag download-bsl dist tags dep build

all:        $.elf $.hex $.l43

build:    clean all

# confgigure the next line if you want to use the serial download
download: download-jtag
# download: download-bsl

# additional rules for files
main_const.h: main_const.el
    $ -batch --unibyte --load=$< --funcall=eval-buffer

$.elf: $
    $ -mmcu=$ -o $@ $^

$.hex: $.elf
    msp430-objcopy -O ihex $^ $@

$.l43: $.elf
    msp430-objdump -dStl $^ >$@

download-jtag: all
    msp430-jtag -e $.elf

download-bsl: all
    msp430-bsl -e $.elf

clean:
    rm -f $(CLEANEXTS)

tags:
    find . -name '*.c' -print -or -name '*.h' -print -or -name '*.S' -print |
xargs -e ctags -e

# backup archive
dist:
    tar czf dist.tgz *.c *.h *.txt *.S Makefile

%.o: %.c
    $(CC) -MMD $(CFLAGS) -c -o $@ $<

%.o: %.S
    $(AS) -MMD $(ASFLAGS) -c -o $@ $<

%.d: %.c
    @echo "Making depends for $<"
    $(CC) -MM $(CPPFLAGS) $(CFLAGS) $< 1>$@

%.d: %.S
    @echo "Making depends for $<"
    $(CC) -MM $(CPPFLAGS) $(ASFLAGS) $< 1>$@

dep: $(depends)

include $(depends)

- --->8------>8------>8------>8------>8------>8------>8------>8---


--

EM

Re: Прерывания в ARM-GCC (или опять LPC)
Привет Gerasimov!

19 Jan 06 06:53, Gerasimov Gerasim писал Alex Mogilnikov:

 GG> Сделал всё как доктор прописал, поначалу даже обрадывался Yes!!!, но
 GG> полностью просмотрев листинг обнаружил, что комментарии из строк
 GG> сишного исходника вставлены всего в три функции (причём мелких и не
 GG> интересных), а их в исходнике с десяток, и та которая которая глючит
 GG> представлена в неудобоваримом виде: номер строки в исходнике и
 GG> ассемблерный текст, приходится два окна открывать, в одном исходник -
 GG> в другом листинг, это же неудобно :-(

    Hикогда с такми не сталкивался. Хотя я очень редко листинги смотрю. Покажи
пример исходного файла, я попробую воспроизвести. Если большой и сократить не
получается, можешь выслать мне на alx<некошка>intellectronika.ru.

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... О сколько нам открытий чудных готовит открывашки крюк!

Site Timeline