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

Мало того , что там "разноразмерные буквы"  , еще ,я так понимаю , используется "ногодрыг" . IAR предупреждает , что все это не имеет смысла , а после 

ad9854_wr = 0 ;    на это ругается , что ждал ";"
#define ad9854_wr paout (5) 
 #define paout (n) bit_addr (gpioa_odr_addr, n) // output   

Как порешить это ?

 

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


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

1 hour ago, muravei said:

Как порешить это ?

Модератор: Потрудитесь задать вопрос яснее: версия IAR, какой микроконтроллер? Приведите в порядок мысли и предложения.

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


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

Что тут не понятно?

Применение в .c  ad9854_wr = 0 ;   
определение в его .h  #define ad9854_wr paout (5) 
опред. макроса в еще .h   #define paout (n) bit_addr (gpioa_odr_addr, n) // output   

2 часа назад, haker_fox сказал:

какой микроконтроллер?

Естественно , тот откуда вы это перенесли -ARM.

ad9854_wr = 0 ;
ad9854_wr = 1 ;

Подозреваю, что это не нравится препроцессору. 

 

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


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

4 часа назад, muravei сказал:

ad9854_wr = 0 ;    на это ругается , что ждал ";"
#define ad9854_wr paout (5) 
 #define paout (n) bit_addr (gpioa_odr_addr, n) // output   

Как порешить это ?

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

Во-первых слово "ODR" сильно напоминает сокращение "Output Data Register", бытующего у контроллеров архитектуры ARM, в частности у семейства stm32.  Отсюда очень вероятно, что дефиниция

bit_addr (gpioa_odr_addr, n)

обозначает n-ый бит регистра GPIA->ODR, а дефиниция

#define ad9854_wr paout (5) 

обозначает 5-ый бит этого этого регистра, соответствующий пину PA5 порта контроллера. Следовательно дефиниция

ad9854_wr = 0;

означает обнуление этого бита  и выдачей на пин PA5  низкого уровня.

Однако если компилятор ругнулся на

ad9854_wr = 0;

То, скорее всего, потому что дефиниции следует располагать в обратном порядке

#define paout (n) bit_addr (gpioa_odr_addr, n) // output

#define ad9854_wr paout (5) 

и только после этого можно писать

ad9854_wr = 0;

Хотя я бы предложила вообще не пользоваться этими дефициями, а шевелить ножкой PA5 так:

Ножку поднять: GPIOA->ODR | (1 << 5);  // добавляем 5-ый бит в ODR

Ножку опустить: GPIOA->ODR & ~(1 << 5);  // стираем 5-ый бит из ODR

Хотя правильнее дергать ножкой не через регистр ODR, через регистр BSRR:

void Set_PA_bits( unsigned char val) { GPIOA->BSRR = ((uint8_t)~val << 16) | val; }

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


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

5 minutes ago, muravei said:

тот откуда вы это перенесли -ARM.

Я просил про микроконтроллер. Это что-то типа STM32F103, LPC1778. ARM - это же семейство архитектур: Cortex-M0, Cortex-A7, ARM7TDMI.

А перенёс, потому что похоже, что проблема у Вас с инструментарием, а не с микроконтроллером. Но его название тоже неплохо бы знать.

7 minutes ago, muravei said:

Что тут не понятно?

Давайте не будем повторять эту многовековую ошибку, когда вопрошающий считает, что его слушатели в курсе всех его дел. Вас попросили пояснить - проявите уважение, и дайте пояснения.

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


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

Как то даже неудобно нарушать поток знаний от гуру программирования, но поскажите, начинающеему, что означает на Вашем языке программирвоания ?

bit_addr (gpioa_odr_addr, 5) = 0 ;

 

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


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

On 9/2/2023 at 6:05 PM, x893 said:

Как то даже неудобно нарушать поток знаний от гуру программирования, но поскажите, начинающеему, что означает на Вашем языке программирвоания ?

bit_addr (gpioa_odr_addr, 5) = 0 ;

 

Есть гипотеза, что тут сокрыто обращение типа

*((volatile uint32_t*)<некое число>) = 0;

Например bit-band

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


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

54 минуты назад, Xenia сказал:

То, скорее всего, потому что дефиниции следует располагать в обратном порядке

#define paout (n) bit_addr (gpioa_odr_addr, n) // output

#define ad9854_wr paout (5) 

Порядок расположения дефиниций (о слово то какое:smile:) не имеет значения))

P.S. Пока ТС не расскажет про bit_addr(), любой ответ - гадание на чайном грибе.

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


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

1 час назад, Arlleex сказал:

про bit_addr()

#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) 
 // IO port address mapping
#define GPIOA_ODR_Addr    (GPIOA_BASE+20) //0x40020014

stm32f407

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


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

1 hour ago, dimka76 said:

Есть гипотеза, что тут сокрыто обращение типа

*((volatile uint32_t*)<некое число>) = 0;

Например bit-band

Гипотеза правильная, но реализация видимо подкачала, раз компилятор пишет ошибку.

Да и текст после препроцессора скрывает ТС.

Видимо - это ЧатГПТ тренируется на людях-телепатах.

BIT_ADDR != bit_addr

Но не мне гуру программирования советы давать.

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


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

27 минут назад, x893 сказал:

Но не мне гуру программирования советы давать.

А ведь неплохо получается, не подавляйте в себе талант))

P.S. ТС, во-первых да, правильно тут сказали уже, Си чувствителен к регистру писанины, ну а во-вторых, в строчке "#define paout (n)" не должно быть пробела перед скобкой, иначе это синтаксическая ошибка совсем не то, что ожидалось.

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


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

1 час назад, x893 сказал:

BIT_ADDR != bit_addr

 

1 час назад, Arlleex сказал:

Си чувствителен к регистру писанины

С этого я начинал.

8 часов назад, muravei сказал:

"разноразмерные буквы" 

1 час назад, Arlleex сказал:

не должно быть пробела

А вот это еще не пробовал.

 

 

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


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

30 minutes ago, muravei said:

А вот это еще не пробовал.

Орешек знаний твёрд

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


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

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

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

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

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

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

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

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

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

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