Условная компиляция между Си и Asm

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

Translate This Thread From Russian to

Threaded View
 
Нужно реализовать в модуле на asm-е замену нескольких строк другими,
или в крайнем случае всего модуля на другой, в зависимости от #define в Си.
Т.е. в Си пишем:
#define test1  //или test2
А в модуле на asm-e получить:
SCL     EQU    P2.1  ; если test1
или
SCL     EQU    P2.7  ; если test2




Условная компиляция между Си и Asm
Tue Jun 07 2005 13:20, Vladislav wrote to All:

 V> Hужно реализовать в модуле на asm-е замену нескольких строк другими,
 V> или в крайнем случае всего модуля на другой, в зависимости от #define в
 V> Си.
 V> Т.е. в Си пишем:
 V> #define test1  //или test2
 V> А в модуле на asm-e получить:
 V> SCL     EQU    P2.1  ; если test1
 V> или
 V> SCL     EQU    P2.7  ; если test2

Hужно 2 вещи: чтобы асм умел понимать директивы препроцессора в Си-стиле,
и чтобы были какие-то предопределенные макроопределения в компиляторе Си
и/или ассемблере (обычно они есть).
Тогда делаешь, к примеру:
#ifdef __IAR_C
  #define бла-бла-бла //для Си
#else
  #define ля-ля-ля    //для асм
#endif

wbr, Andy


Re: Условная компиляция ме жду Си и Asm
Hемедленно нажми на RESET, Andy Mozzhevilov!


Quoted text here. Click to load it

  Только для поддержки корректных номеров строк в сообщениях об ошибках,
листингах и прочей отладочной информации.  Если это надо.



Re: Условная компиляция ме жду Си и Asm
Hемедленно нажми на RESET, Vladislav!


Quoted text here. Click to load it

  А что мешает пропускать ассемблерные модули через С-препроцессор?




Re: Условная компиляция между Си и Asm

"Kirill Frolov" сообщил:
Quoted text here. Click to load it

В Franklin-е это жутко геморойно, поскольку тогда создается не OBJ, а SRC,
который потом
повторно ASM-ом надо проходить, а уж потом линком. Ну и еще, тогда там куча
всякой пакости
возникает. Короче, можно, но не нужно ( работать не удобно ). Переходить
куда то на KEIL, то же
не выходит, поскольку KEIL не способен разбросать константы по определенным
физическим адресам в выходном файле.



Re: Условная компиляция между Си и Asm
Wed Jun 08 2005 03:30, Vladislav wrote to Kirill Frolov:

 >>> или
 >>> SCL     EQU    P2.7  ; если test2
 >>
 >>  А что мешает пропускать ассемблерные модули через С-препроцессор?

 V> В Franklin-е это жутко геморойно, поскольку тогда создается не OBJ, а SRC,

Ой, франклин, фу, брось гадость - там баг на баге сидит и багом погоняет.
Компилятор мертвый, не развивается, не поддерживается.

 V> возникает. Короче, можно, но не нужно ( работать не удобно ). Переходить
 V> куда то на KEIL, то же
 V> не выходит, поскольку KEIL не способен разбросать константы по
 V> определенным физическим адресам в выходном файле.

Hе совсем понятно, зачем именно константы помещать по определенным адресам.
В крайнем случае это всегда можно сделать на ассемблере, а также посмотреть,
можно ли порулить секциями и указатель линкеру адрес для их размещения.

wbr, Andy


Re: Условная компиляция между Си и Asm
 

"Andy Mozzhevilov"  сообщилследующее:
Quoted text here. Click to load it
Ну вот мне нужно. Меня не устраивал родной загрузчик и я написал свой, чтоб
по 485 мог
автоматически апгрейтится ( лежит вверху, где и положено), а в низу лежит
рабочая прога.
В загрузчике есть область разных констант ( лог. номер устройсва в сети, мас
адрес, скорость 485 и т.д.)
Основная прога то же использует эти константы для своей работы. Исходники
сделаны, так, что меняя
любой параметр в одном только месте, изменения автоматом, вносятся в обе
программы.
Очень удобно. Вот на КЕЛЕ такие фокусы не прошли. Не смог он сделать нечто
подобное:
#define ADR_485    0xF820                             // Физический адрес
константы скорости UART 485
#define SP_485                   // Скорость UART 485  + 2
байта защиты
code at ADR_485 uchar Ur_485[3]=SP_485;  // Скорость UART 485

 




Re: Условная компиляция между Си и Asm
Wed Jun 08 2005 03:30, Vladislav wrote to Kirill Frolov:

 >>  А что мешает пропускать ассемблерные модули через С-препроцессор?
 V> В Franklin-е это жутко геморойно, поскольку тогда создается не OBJ, а SRC,
 V> который потом повторно ASM-ом надо проходить, а уж потом линком.

 Зачем повторно?  Пишешь правило:

OPTIONS = -DTEST -DBLABLABLA=2 -DBLABLABLA...

%.src: %.asm
    $(CPP) $(OPTIONS) < $< > $@

%.obj: %.src
    $(ASM) $<


 V> не выходит, поскольку KEIL не способен разбросать константы по
 V> определенным физическим адресам в выходном файле.

  Да ну?  Такого не бывает.  


Re: Условная компиляция между Си и Asm
 

"Kirill Frolov"  сообщилследующее:
Quoted text here. Click to load it
Ранее в конфе уже это обсуждали. Может в последних версиях и появилась такая
возможность?
хотя на врядли.




Re: Условная компиляция между Си и Asm
Привет Vladislav!

07 Jun 05 13:20, Vladislav писал All:

 V> Hужно реализовать в модуле на asm-е замену нескольких строк другими,
 V> или в крайнем случае всего модуля на другой, в зависимости от #define
 V> в Си. Т.е. в Си пишем: #define test1  //или test2 А в модуле на asm-e
 V> получить: SCL     EQU    P2.1  ; если test1 или SCL     EQU    P2.7  ;
 V> если test2

#ifdef test1
#define SCLPIN P2.1
#elif test2
#define SCLPIN P2.7
#else
#error bla-bla-bla
#endif

SCL EQU SCLPIN

Всего наилучшего,                                 [Team PCAD 2000]
Алексей М.
... Слепой Пью, Глухой Ем...

Условная компиляция между Си и Asm
Привет Vladislav!

07 Jun 05 16:45, Alex Mogilnikov писал Vladislav:

 AM> #ifdef test1
 AM> #define SCLPIN P2.1
 AM> #elif test2

    Тут я поторопился по невнимательности. Сделует читать

#elif defined test2

    Далее по тексту.

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

Site Timeline