Перейти к содержанию
    

IAR ARM проблема с дефайном в HAL

Добрый день.

Пишу в IAR под STM32F7 на HAL

Проблема в следующем, есть код в майн

#define ADS131_1_PIN_CS_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)
#define ADS131_1_PIN_CS_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)
.
.
ADS131_1_Command(0X11);
ADS131_1_SetConfig();
.
.
void ADS131_1_Command(uint8_t vd)
{

  uint8_t data;
  ADS131_1_PIN_CS_ON;
  HAL_SPI_TransmitReceive(&hspi1, &vd, &data, sizeof(data), 0x1);
  ADS131_1_PIN_CS_OFF;    
}

Он работает и микросхема команду правильно воспринимает

Стоит мне перенести строки

#define ADS131_1_PIN_CS_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)

#define ADS131_1_PIN_CS_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)

в отдельный файл port_def.h

#ifndef    __PORTS_H
#define __PORTS_H  
#define ADS131_1_PIN_CS_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)
#define ADS131_1_PIN_CS_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET)
#endif

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

Не пойму что не так? Заранее спасибо.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не пойму что не так? Заранее спасибо.

 

Забыли подключить port_def.h в тот файл где используете порты.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а какая необходимость обзывать переменную

#ifndef __PORTS_H

с подчерками впереди ? или и файл так назван ?

 

Варинингов тоже нет ?

 

Для отлова измените содержимое макроопределений на свое, например __no_operation() или любое другое.

 

Похоже что файл опеределений макросов не включается по #ifndef

Проверьте это.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чудес не бывает. Сделайте hex обоих вариантов. Сравните. От переноса места определния текстовой подстановки (макроса) результирующий код меняться не должен - макросы разворачиваются еще до начала компиляции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а какая необходимость обзывать переменную

#ifndef __PORTS_H

с подчерками впереди ? или и файл так назван ?

Привычка

Варинингов тоже нет ?

Нет, нету.

 

Похоже что файл опеределений макросов не включается по #ifndef

Проверьте это.

Первым делом проверил.

 

Чудес не бывает. Сделайте hex обоих вариантов. Сравните. От переноса места определния текстовой подстановки (макроса) результирующий код меняться не должен - макросы разворачиваются еще до начала компиляции.

Упс, а hex разные.

 

Изменено пользователем rtfcnf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

. . . .

Упс, а hex разные.

 

Чтоб не лезть в hex, можете диффером сравнить lst или asm или ... файлы из проектов "где хорошо" и "где плохо".

 

Проверьте очередность по h-файлам - это иногда имеет значение.

 

HAL макросы -функции работают на "базовой" адресации для периферии, которая процессоро-зависимая.

Если за "базу" берется неправильный для данного процессора адрес,

синтаксической ошибки не будет. Но и работать (правильно) тоже.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так у вас SET и RESET перепутаны. :)

Собственное соглашение, ON - активный уровень, для чипа к которому подключен пин.

k155la3, спасибо, проект и плата на работе так что до понедельника попробовать не смогу.

Изменено пользователем rtfcnf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Собственное соглашение, ON - активный уровень, для чипа к которому подключен пин.

Сравните по буквам ваши соглашения в дефайнах внутри исходника и во внешнем файле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сравните по буквам ваши соглашения в дефайнах внутри исходника и во внешнем файле.

 

Виндузная утилита fc.exe - в текстовом и бинарном режиме или диффер.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сравните по буквам ваши соглашения в дефайнах внутри исходника и во внешнем файле.

ТС не видит.

main.c

#define ADS131_1_PIN_CS_OFF HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)

port_def.h

#define ADS131_1_PIN_CS_ON HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТС не видит.

 

респект :)

 

ЭТО наверное ОНО и ЕСТЬ исм !

Надо пользоваться осцилографом для отладки и даже поиска очепяток.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...