Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR ARM проблема с дефайном в HAL
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
rtfcnf
Добрый день.
Пишу в 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

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

AlexandrY
Цитата(rtfcnf @ Sep 23 2016, 15:05) *
Не пойму что не так? Заранее спасибо.


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

rtfcnf
Извините, что в примере не привел, он подключен.
k155la3
а какая необходимость обзывать переменную
#ifndef __PORTS_H
с подчерками впереди ? или и файл так назван ?

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

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

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


Сергей Борщ
Чудес не бывает. Сделайте hex обоих вариантов. Сравните. От переноса места определния текстовой подстановки (макроса) результирующий код меняться не должен - макросы разворачиваются еще до начала компиляции.
rtfcnf
Цитата(k155la3 @ Sep 23 2016, 15:31) *
а какая необходимость обзывать переменную
#ifndef __PORTS_H
с подчерками впереди ? или и файл так назван ?

Привычка
Цитата(k155la3 @ Sep 23 2016, 15:31) *
Варинингов тоже нет ?

Нет, нету.

Цитата(k155la3 @ Sep 23 2016, 15:31) *
Похоже что файл опеределений макросов не включается по #ifndef
Проверьте это.

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

Цитата(Сергей Борщ @ Sep 23 2016, 15:46) *
Чудес не бывает. Сделайте hex обоих вариантов. Сравните. От переноса места определния текстовой подстановки (макроса) результирующий код меняться не должен - макросы разворачиваются еще до начала компиляции.

Упс, а hex разные.
ViKo
Так у вас SET и RESET перепутаны. sm.gif
k155la3
Цитата(rtfcnf @ Sep 23 2016, 16:04) *
. . . .
Упс, а hex разные.


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

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

HAL макросы -функции работают на "базовой" адресации для периферии, которая процессоро-зависимая.
Если за "базу" берется неправильный для данного процессора адрес,
синтаксической ошибки не будет. Но и работать (правильно) тоже.


rtfcnf
Цитата(ViKo @ Sep 23 2016, 16:57) *
Так у вас SET и RESET перепутаны. sm.gif

Собственное соглашение, ON - активный уровень, для чипа к которому подключен пин.
k155la3, спасибо, проект и плата на работе так что до понедельника попробовать не смогу.
ViKo
Цитата(rtfcnf @ Sep 24 2016, 08:24) *
Собственное соглашение, ON - активный уровень, для чипа к которому подключен пин.

Сравните по буквам ваши соглашения в дефайнах внутри исходника и во внешнем файле.
k155la3
Цитата(ViKo @ Sep 24 2016, 09:14) *
Сравните по буквам ваши соглашения в дефайнах внутри исходника и во внешнем файле.


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

alag57
Цитата(ViKo @ Sep 24 2016, 11:14) *
Сравните по буквам ваши соглашения в дефайнах внутри исходника и во внешнем файле.

ТС не видит.
Цитата
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)
k155la3
Цитата(alag57 @ Sep 24 2016, 11:29) *
ТС не видит.


респект sm.gif

ЭТО наверное ОНО и ЕСТЬ исм !
Надо пользоваться осцилографом для отладки и даже поиска очепяток.
rtfcnf
Большое спасибо, всем.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.