Jump to content

    

Sergey_Aleksandrovi4

Свой
  • Content Count

    221
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Sergey_Aleksandrovi4

  • Rank
    Местный
  • Birthday 11/17/1985

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

3591 profile views
  1. @slanted спасибо, впервые узнал про преобразование типов при предупреждении "implicit declaration". По поведению точно оно: тип int в AVR 16-битный, возвращается через регистры r24:r25. И один из способов проверки int-величины на 0 может осуществляться как раз с помощью команды or r24, r25. Ваш совет помог, но не сразу. Все инклуды были прописаны, предупреждение об implicit declaration не было, перекомпиляция не убирала ошибку. Однако после того, как выполнил Clean Solution и полностью пересобрал проект - картина изменилась. Все проверки bool-результатов выполняются посредством правильной команды and r24, r24 (хотя я так и не понял почему не используют tst или cpi) Спасибо за помощь и за ликбез.
  2. Здравствуйте. Снова я со своими AVR-ками. Пишу загрузчик в gcc (Atmel Studio 7). Отладил алгоритм в основной секции ROM при -Og оптимизации, перенёс в область загрузчика, но ужал по код по размеру: оптимизация -Os. Посыпались глюки. Стал разбираться. Возвращаемые функциями bool-результаты в ряде случаев всегда интерпретируются вызывающим кодом как true. Копнул глубже. Функции возвращают bool-результат через регистр r24 т.к. тип bool однобайтный: объявлен как unsigned char проверил это с помощью sizeof(bool)==1. В asm-листинге вижу как функции заносят корректное значение в r24 перед выходом, пока всё отлично. НО в вызывающем коде проверка bool-результатов на true/false производится 2 экзотическими способами: 1) and r24, r24 2) or r24, r25 Второй вариант и создаёт ошибку, т.к. в r25 зачастую лежит мусор отличный от нуля. В паре мест я видел что перед вызовом функции r25 обнуляется, но обычно - нет, и кроме того через r25 в функцию передаётся аргумент. Я изрядно позабыл avr-asm, но вроде бы логично было использовать специально-предназначенные cpi r24, 0 или tst r24. Ладно, возможно чего-то не понимаю. Нашёл пока лишь единственный способ побороть этот глюк - добавил ассемблерные вставки перед возвратом false. Но это лютые костыли кмк. asm volatile ("clr r25" ::: "memory"); Может быть кто сталкивался с подобным поведением компилятора и знает более элегантные пути обхода? Допускаю, что сам мог где-то в опциях компилятора не указать какой-нибудь волшебный gcc-шный ключ.
  3. Вы слишком высоко оценили мои способности :D Линуксовый мир мне чужд, на банальную сборку одного лишь libiconv по инструкции ушла большая часть рабочего дня. И дело ещё в другом. Все эти исходники должны компилироваться на "ванильных" сборках Atmel Studio. Т.е. если разработчик после меня захочет что-то поправить в коде, то он просто скачает и установит дистрибутив студии с сайта и откроет в ней мой проект, а не будет рвать на себе волосы в надежде собрать рабочий тулчейн из исходников. Было бы дело в одной лишь dll библиотеке, её можно бы было положить в репозиторий с проектом и написать readme как и куда её подключать. По этой же причине отказался от идеи что-либо править руками в make-файле, пусть автоматически генерируется по настройкам из GUI студии. Поэтому буду писать поддержку юникода. По флэш-памяти у меня, грубо говоря, ограничений нет.
  4. Конкретно с этим процессором не работал, но, вспоминая опыт годичной давности - никакой "магии" при управлении ADAU с внешнего МК не было. Описание регистров должно быть в даташите, I2C тоже вполне тривиальный интерфейс. Sigma Studio с отладчиком (у меня был недорогой китайский клон с aliexpress) крайне полезна тем, что управляя через графический интерфейс можно видеть какие биты в каких регистрах затрагиваются, там окошко с консольным "выхлопом" есть. Документация их мне крайне не понравилась. Да и много очень настроек, в голове не удержать. А вот через Sigma Studio отлаживаться было гораздо проще. Даже на их форуме EngineerZone в одной из тем посвящённых ADAU инженер от AD рекомендовал устанавливать этот пакет чтобы в полной мере прочувствовать все особенности чипа.
  5. Тоже малоприменимо, спасибо за совет. У меня в устройстве GUI в которое потребовалось добавить поддержку нескольких языков. Хочется видеть в исходниках именно текст в том виде, в котором он выводится на экран. Если строковые константы будут записаны "крякозябрами" или через подобные литералы, то управлять и модифицировать проект в дальнейшем будет проблематично. Разве что оставлять после каждой строки комментарий в человекочитаемом виде. Но это на потом, если с юникодом не получится.
  6. Нет, только строковые литералы (строковые константы), текст исходников по-прежнему должен быть в ASCII. Изначально была идея прогнать текст через внешние редакторы чтобы получить 8-битные символы, но "крякозябры" в исходниках не допустимы.
  7. В качестве оффтопа спрошу. Как давно и почему вдруг Micro Cap стал вдруг беплатным? Сколько помню студенческие годы, всегда carck.exe в папке с дистрибутивом присутствовал)
  8. Присоединяюсь к совету обновить ПО, наверняка баг какой-то. Для обновления из окна программы нажмите на иконку в правом верхнем углу (три горизонтальные черты) и выберите пункт Check for updates... Вот так выглядит последняя версия, в режиме stream все настройки устанавливаются корректно. Обратите внимание, в новых версиях появилась функция автоматического перезапуска захвата (у Вас в старой версии такой нет в интерфейсе). По сути похожа на осциллограф в ждущем режиме, возможно она Вам подойдёт. Прибор отличный. После его приобретения перестал использовать осциллограф при работе с цифровыми устройствами. Осциллограф использую только для исследования аналоговых сигналов и питания. И в качестве PS на будущее. Подобного рода устройства очень критичны к качеству USB-кабеля. Штатный должен быть хорошим, по крайней мере мне от китайцев отличный достался. Если начнутся проблемы с потерей связи - первым делом меняйте кабель. upd! Так у Вас же анализатор не подключен, ёлки-палки (сообщение Unconnected в заголовке окна). Программа в режиме симуляции запустилась. Поэтому и не реагирует на настройки.
  9. Странно конечно, что мой вариант объявления переменной, но с квалификатором volatile, оказался нерабочим. Я этим способом пользовался в нескольких проектах для объявления массива констант в загрузчике. Была включена оптимизация кода по размеру, уровень не вспомню за давностью лет. Основное приложение обращалось к ним исключительно по указателю. Сам загрузчик к этим переменным никак не обращался.
  10. Когда работал в IAR, то для подобных целей использовал директиву #pragma location = addr И обязательно указывал директиву __root при объявлении переменной чтобы линкер гарантированно её не выбросил. Попробуйте такой вариант: #pragma location = 0x080E0000 __root const uint32_t key_appl = 0x03020100;
  11. Попробуйте факт окончания передачи отслеживать по двум флагам: первично по TXE и лишь вторично по BSY. Уже не вспомню, но были какие-то "приколы" с BSY-флагом в F1xx семействе. void foo(bar) { GPIOB->ODR &= ~GPIO_ODR11; //..... while (!(SPI1->SR & SPI_SR_TXE)); while (SPI1->SR & SPI_SR_BSY); GPIOB->ODR |= GPIO_ODR11; } upd BSY устанавливается с задержкой. Т.е. факт начала передачи отслеживаете по TXE==0. Он становится '0' сразу же после записи слова данных в SPI_DR. После первого такта SCLK, когда слово из временного буфера выгрузилось в сдвиговый регистр, флаг TXE становится '1' и в дело вступает BSY, который к этому времени гарантированно установился в '1'. В общем в RefManual почитайте, сейчас нет времени в это окунаться.
  12. Отпишусь, что ли по результатам: безуспешно. В Path никаких упоминаний Atmel Studio не было. Нашёл топик в котором человеку так же понадобился libiconv в составе avr-gcc http://we.easyelectronics.ru/JustMoose/pro-gcc-i-kodirovki.html. Он, в свою очередь, нашёл собранный под windows avr-gcc с поддержкой libiconv. Правда, avr-gcc там старый: 4.9.2 против последнего 5.4.0. https://andybrown.me.uk/2015/03/08/avr-gcc-492/ Установил ради интереса - преобразование кодировок работает. Изучил в hex-редакторе тело файлов avr-gcc.exe из состава Atmel Studio и из сторонней сборки. Штатный из состава студии про библиотеку libiconv-2.dll даже не знает в отличие от стороннего. При этом строки с ключами -finput-charset= и -fexec-charset= в нём присутствуют. Не удивительно, что у меня ничего не вышло при подсовывании dll в директорию тулчейна. Предположу, что в коде компилятора при обнаружении ключа запроса преобразования кодировки срабатывает "заглушка", она останавливает сборку с ошибкой. Затея с самого начала была обречена на провал. Придётся что-то придумывать с декодированием текста в UTF-8 силами самого МК. xvr, спасибо за содействие.
  13. @xvr, спасибо что откликнулись. exe.exe - глаз замылился под вечер. Впрочем и после правок не помогло, удалил этот вызов из makefile. Директория в которую я размещал .exe и .dll как раз и является директорией Си-тулчейна. Или Вы про тот PATH, который в настройках "переменных среды" Windows?
  14. Здравствуйте. Синопсис. Потребовалось поиграться с кодировками текста в исходниках проекта. В gcc это делается ключами компилятора -finput-charset=UTF-8 -fexec-charset=cp1251 За преобразование кодировок отвечает утилита iconv из библиотеки libiconv. Она отсутствует в стандартной сборке "из коробки" Atmel Studio 7, хотя сам компилятор эти ключи понимает и пытается обрабатывать. Скачал исходники libiconv https://www.gnu.org/software/libiconv/#downloading, собрал под Windows с помощью mingw. На выходе получился исполняемый iconv.exe и его библиотека libiconv-2.dll. Само по себе приложение запускается. Скопировал оба файла в директорию тулчейна \Atmel Studio 7\7.0\toolchain\avr8\avr8-gnu-toolchain\bin т.е. туда, где лежат все исполняемые exe-файлы: avr-gcc.exe, avr-size.exe и др. Проблема. Не знаю как сообщить студии что у неё теперь есть недостающая библиотека libiconv. Нашёл в make-файле упоминания exe-файлов, попробовал вручную прописать путь к iconv.exe. Не помогло, студия сообщает об его отсутствии. Возможно надо было какие-то ключи ещё указать. Перерыл все возможные настройки среды и проекта, не нашёл где бы можно было путь к утилите прописать. Изучил внутренности SW4STM32 - System Workbench for STM32 (из того-же gcc-зоопарка) чтобы сделать по аналогии, он с ключами -finput и -fexec проект собирает без ругани. Не нашёл в недрах директорий ни exe, ни dll относящихся к libiconv. Вопрос. Кто-нибудь имеет опыт или знает, как к Atmel Studio подключать дополнительные утилиты? По правильному пути я иду или для поставленной задачи надо весь тулчейн пересобирать-перекомпилировать?
  15. Переменная period объявлена с квалификатором volatile? Ещё такой тупой совет. Сделайте в обработчике прерывания инверсию какого-либо свободного GPIO выхода и посмотрите логическим анализатором на то, как и когда вызывается обработчик при захвате сигнала.