реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> директивы препроцессора для *.s(asm) файлов в Keil
grisha_scorpion
сообщение Dec 22 2015, 12:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 24-08-10
Пользователь №: 59 074



Немного конечно не в тему. Просто не не нашел на форуме про среду разработки Keil.
Подскажите пожалуйста как использовать директивы препроцессора в asm файлах в Keil?
Интересуют такие директивы как #ifdef, #endif и т.д.
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 22 2015, 14:01
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Препроцессор - это для Си. В ассемблере есть аналогичные возможности.
Загляните в мануал.
Go to the top of the page
 
+Quote Post
grisha_scorpion
сообщение Dec 22 2015, 17:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 24-08-10
Пользователь №: 59 074



Цитата(scifi @ Dec 22 2015, 17:01) *
Препроцессор - это для Си. В ассемблере есть аналогичные возможности.
Загляните в мануал.

Спасибо. Но есть еще вопросы.

Допустим есть файл qwe.h:
Код
#define ABS


есть файл asd.s:
Код
      IF :DEF:ABS;проверка объявлен ли ABS
      ......
      ELSE
      .....
      ENDIF


Вопрос: будет ли виден дефайн ABS в файле asd.s? Нужно наверно как то подключить файл qwe.h. Как это сделать?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 22 2015, 17:30
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(grisha_scorpion @ Dec 22 2015, 20:22) *
Нужно наверно как то подключить файл qwe.h. Как это сделать?

Как и в 'C':
#include "qwe.h"
Go to the top of the page
 
+Quote Post
grisha_scorpion
сообщение Dec 22 2015, 17:37
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 24-08-10
Пользователь №: 59 074



Цитата(aaarrr @ Dec 22 2015, 20:30) *
Как и в 'C':
#include "qwe.h"

Проверил. Так не катит. Выдает ошибку
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 22 2015, 17:41
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(grisha_scorpion @ Dec 22 2015, 20:37) *
Проверил. Так не катит. Выдает ошибку

Надо еще отдельно через препроцессор протащить. Подробности тут.
На фоне конкурентов довольно "костыльно", конечно.
Go to the top of the page
 
+Quote Post
grisha_scorpion
сообщение Dec 23 2015, 08:35
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 24-08-10
Пользователь №: 59 074



Цитата(aaarrr @ Dec 22 2015, 20:41) *
Надо еще отдельно через препроцессор протащить. Подробности тут.
На фоне конкурентов довольно "костыльно", конечно.

Может есть что то попроще?


По совету выше сделал вот так в фале asd.s:
Код
     INCLUDE qwe.h
      IF :DEF:ABS;проверка объявлен ли ABS
      ......
      ELSE
      .....
      ENDIF

Но компилятор выдает ошибку:
Код
qwe.h   1   Error: A1167E: Invalid line start

Я думаю это связано с несовместимостью файла qwe.h с ассемблерным форматом.
Предложите еще варианты как все таки сделать так, чтобы в ассемблерном файле можно было контролировать объявление дефайна.

Сообщение отредактировал grisha_scorpion - Dec 23 2015, 09:04
Go to the top of the page
 
+Quote Post
KRS
сообщение Dec 23 2015, 10:00
Сообщение #8


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(grisha_scorpion @ Dec 23 2015, 11:35) *
Предложите еще варианты как все таки сделать так, чтобы в ассемблерном файле можно было контролировать объявление дефайна.

Собственно говоря использовать IARовский ассемблер, тем более что и тема про IAR
Go to the top of the page
 
+Quote Post
grisha_scorpion
сообщение Dec 23 2015, 11:29
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 24-08-10
Пользователь №: 59 074



Цитата(KRS @ Dec 23 2015, 13:00) *
Собственно говоря использовать IARовский ассемблер, тем более что и тема про IAR

Я понимаю что тема про IAR, но на форуме я не нашел темы связанной с Keil, что для меня странно.
IARовский компилятор без проблем схавает в ассемберном фалйе такие конструкции как #ifdef, #else, #endif... И я это делаю успешно в IARе. Но у меня сейчас проект использует keilовский компилятор. Переводить все в IAR не хочу по разным причинам.
Go to the top of the page
 
+Quote Post
grisha_scorpion
сообщение Dec 23 2015, 14:32
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 24-08-10
Пользователь №: 59 074



Цитата(aaarrr @ Dec 22 2015, 20:41) *
Надо еще отдельно через препроцессор протащить. Подробности тут.

Попробовал как в ссылке. Не помогает.
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 24 2015, 06:32
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(grisha_scorpion @ Dec 23 2015, 17:32) *
Попробовал как в ссылке. Не помогает.


А чего тут может не помогать? Вам надо отдельно запустить внешний препроцессор, а его выход уже скормить компилятору.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Feb 1 2016, 15:43
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Доброго времени суток. Не стал открывать новую тему, так как вопрос про препроцессор ассемблера...Но для IAR.

Тема такая:
Обкатываю собственную библиотеку. Есть несколько плат с предустановленными процессорами STM32F. В опциях компилятора, во вкладке препроцессора задаю тип платы, например OPEN407Z.
Есть файл "board.h" в котором подключаю нужный хидер для целевого варианта проекта. Начало выглядит так:
CODE

/*******************************************************************************
MCU configs
*******************************************************************************/
#if defined OPEN107V /* Defined WaveShare Open107V board */
#define STM32F10X_CL 1 /* Open107V on board target MCU */
#include "stm32f10x.h" /* Link MCU definitions */

#define BOARD_CFG_MCU_HSE_OSC_CLOCK 25000000U /* External quartz clock */

#elif defined OPEN407Z /* Defined WaveShare Open407Z board */
#define STM32F40XX 1 /* Open407Z on board target MCU */
#include "stm32f4xx.h" /* Link MCU definitions */

#define BOARD_CFG_MCU_HSE_OSC_CLOCK 8000000U /* External quartz clock */

#endif

#ifndef __ASSEMBLER__

#include "stdafx.h"

..........

Тут все прекрасно работает. Все драйверы периферии для разных типов МК подключают нужные хедеры и все компилится без ошибок.
Теперь для каждого варианта МК мне нужно подключить ассемблерный стартап. Вот тут затык. В начале *.s фала вставляю вот такой код препроцессора:
CODE

#define __ASSEMBLER__
#include "board.h"

#if defined STM32F40XX

MODULE ?cstartup

............................


Но! После строчки "#if defined STM32F40XX" тело стартапа нифига не компилится!
В чем я ошибаюсь?

Спасибо!


--------------------
Go to the top of the page
 
+Quote Post
Garmin
сообщение Feb 3 2016, 14:02
Сообщение #13





Группа: Участник
Сообщений: 5
Регистрация: 23-11-14
Пользователь №: 83 800



Цитата(prottoss @ Feb 1 2016, 17:43) *
для каждого варианта МК мне нужно подключить ассемблерный стартап. Вот тут затык. В начале *.s фала вставляю вот такой код препроцессора:

Мне тоже пришлось повозиться с ассемблерным стартапом в IAR. Но я вышел из положения другим путём: избавился от ассемблерного стартапа совсем. Добавил описание таблицы прерываний в *_it.c файл. Пример для STM32F446 по ссылке:
http://forum.easyelectronics.ru/viewtopic....=428768#p428768
После такого преобразрвания нетрудно написать любые сишные команды препроцессора.

Сообщение отредактировал Garmin - Feb 3 2016, 14:03
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 3 2016, 14:09
Сообщение #14


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Всё это можно через Makefile разрулить...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
prottoss
сообщение Feb 3 2016, 15:37
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Спасибо за ответыю
Все что сказано выше - понятно. Но, я думал, раз в документации сказано, что препроцессор С поддерживается - можно все сделать так, как сделал я.


--------------------
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 07:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01504 секунд с 7
ELECTRONIX ©2004-2016