muravei 3 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба Мало того , что там "разноразмерные буквы" , еще ,я так понимаю , используется "ногодрыг" . IAR предупреждает , что все это не имеет смысла , а после ad9854_wr = 0 ; на это ругается , что ждал ";" #define ad9854_wr paout (5) #define paout (n) bit_addr (gpioa_odr_addr, n) // output Как порешить это ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба Набор букв какой-то. Ничего не понял. bit_addr() - где? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба 1 hour ago, muravei said: Как порешить это ? Модератор: Потрудитесь задать вопрос яснее: версия IAR, какой микроконтроллер? Приведите в порядок мысли и предложения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
muravei 3 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба Что тут не понятно? Применение в .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 ; Подозреваю, что это не нравится препроцессору. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба 5 minutes ago, muravei said: тот откуда вы это перенесли -ARM. Я просил про микроконтроллер. Это что-то типа STM32F103, LPC1778. ARM - это же семейство архитектур: Cortex-M0, Cortex-A7, ARM7TDMI. А перенёс, потому что похоже, что проблема у Вас с инструментарием, а не с микроконтроллером. Но его название тоже неплохо бы знать. 7 minutes ago, muravei said: Что тут не понятно? Давайте не будем повторять эту многовековую ошибку, когда вопрошающий считает, что его слушатели в курсе всех его дел. Вас попросили пояснить - проявите уважение, и дайте пояснения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба Как то даже неудобно нарушать поток знаний от гуру программирования, но поскажите, начинающеему, что означает на Вашем языке программирвоания ? bit_addr (gpioa_odr_addr, 5) = 0 ; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 59 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба On 9/2/2023 at 6:05 PM, x893 said: Как то даже неудобно нарушать поток знаний от гуру программирования, но поскажите, начинающеему, что означает на Вашем языке программирвоания ? bit_addr (gpioa_odr_addr, 5) = 0 ; Есть гипотеза, что тут сокрыто обращение типа *((volatile uint32_t*)<некое число>) = 0; Например bit-band Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба 54 минуты назад, Xenia сказал: То, скорее всего, потому что дефиниции следует располагать в обратном порядке #define paout (n) bit_addr (gpioa_odr_addr, n) // output #define ad9854_wr paout (5) Порядок расположения дефиниций (о слово то какое) не имеет значения)) P.S. Пока ТС не расскажет про bit_addr(), любой ответ - гадание на чайном грибе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
muravei 3 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба 1 hour ago, dimka76 said: Есть гипотеза, что тут сокрыто обращение типа *((volatile uint32_t*)<некое число>) = 0; Например bit-band Гипотеза правильная, но реализация видимо подкачала, раз компилятор пишет ошибку. Да и текст после препроцессора скрывает ТС. Видимо - это ЧатГПТ тренируется на людях-телепатах. BIT_ADDR != bit_addr Но не мне гуру программирования советы давать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 172 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба 27 минут назад, x893 сказал: Но не мне гуру программирования советы давать. А ведь неплохо получается, не подавляйте в себе талант)) P.S. ТС, во-первых да, правильно тут сказали уже, Си чувствителен к регистру писанины, ну а во-вторых, в строчке "#define paout (n)" не должно быть пробела перед скобкой, иначе это синтаксическая ошибка совсем не то, что ожидалось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
muravei 3 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба 1 час назад, x893 сказал: BIT_ADDR != bit_addr 1 час назад, Arlleex сказал: Си чувствителен к регистру писанины С этого я начинал. 8 часов назад, muravei сказал: "разноразмерные буквы" 1 час назад, Arlleex сказал: не должно быть пробела А вот это еще не пробовал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x893 51 2 сентября, 2023 Опубликовано 2 сентября, 2023 · Жалоба 30 minutes ago, muravei said: А вот это еще не пробовал. Орешек знаний твёрд Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 3 сентября, 2023 Опубликовано 3 сентября, 2023 · Жалоба Предать анафеме всю эту макросную муть!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться