На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS

Дорогие друзья! Поздравляем вас с Новым 2018 годом!

Всем удачи, успеха и благополучия!
В новом году ожидаем новых рекордов при подсчёте количества ёлочек на экране ;)


msm.ru
Страницы: (18) « Первая ... 15 16 [17] 18  все  ( Перейти к последнему сообщению )  
    > Разбираемся с IAR, Обсуждаем небольшие коды на IAR.
      Цитата trainer @
      Не на байт, а на слово. Память программ при переходах адресуется пословно, младший бит адреса не указывается в коде команды и подразумевается равным 0. Ну или, если смотреть с другой стороны - адрес является порядковым номером 16-битного слова. Особенность архитектуры AVR.

      вы уж уточняйте о каком адресе идет речь, а то у авр-а много адресных пространств и для каждой свои правила организации и свои инструкции для доступа.
      Собственно речь идет об указателе инструкций
        А там вроде бы на русском языке написано "Память программ", "при переходах"
        Во имя Ctrl, Alt и святаго Del, Enter!

        Основам программирования не обучаю. Не интересно.
          Цитата ir0407 @
          IAR не генерит код(кроме области векторов) если в опциях не подключена никакая библиотека. А мне надо заставить компилятор генерить код без подключения библиотек. Исходников стандартных библиотек в моем IAR нет, только скомпилированные.

          Исходники библиотек обычно имеются у версий компилятора "professional".

          Но, насколько я помню, если библиотека указана, но ничего из неё
          не используется, то в исполнимые коды ничего из такой библиотеки
          не включается. И это не только у IAR.

          Что касается тонкостей адресации.
          Использование С/C++ - компилятора как раз и даёт возможность
          не обращать на эти самые тонкости никакого внимания.
          Не помню, чтобы мне это понадобилось за последние xxx лет.
          Подпись была выключена в связи с наложенным заземлением.
            Цитата ЫукпШ @
            Но, насколько я помню, если библиотека указана, но ничего из неё
            не используется, то в исполнимые коды ничего из такой библиотеки
            не включается.

            Да, ничего не включается, но все равно в дампе присутствует небольшой код инициализации библиотеки. А мне бы хотелось посмотреть где это находится, как сделано и если нужно изменить под свои нужды.
            Цитата ЫукпШ @
            Использование С/C++ - компилятора как раз и даёт возможность
            не обращать на эти самые тонкости никакого внимания.

            Теперь это я уже понял. Просто надо хорошо знать и умело применять опции компилятора и линкера.
            Цитата ЫукпШ @
            Не помню, чтобы мне это понадобилось за последние xxx лет.

            Столько не живут. :jokingly:
              Цитата ir0407 @
              Да, ничего не включается, но все равно в дампе присутствует небольшой код инициализации библиотеки. А мне бы хотелось посмотреть где это находится, как сделано и если нужно изменить под свои нужды.

              Не знаю, не замечал. :huh:

              Может речь идёт о стартапе ?
              Его исходники обычно имеются.
              Поищи файл cstartup (.s90 ?).

              Что касается стандартных процедур, то линкер IAR имеет
              "удобную" логику работы, а именно:
              если некая процедура обнаружена в юзерной программе, в библиотеке
              она не разыскивается. Это значит, можно переопределить
              любую стандартную процедуру. Например, если реализовать
              собственную putchar тогда стандартный printf будет пользовать
              именно её. В результате можно выводить данные куда захочешь.
              Подпись была выключена в связи с наложенным заземлением.
                О, как! :D Не густо же тут вопросов однако... И мой был последним аж два года назад. Ну что ж, попробуем продолжить, т.к. я так и не поборол тогда IAR-овский компилятор, вернулся к своему любимому асму. Потом времени не было этим заниматься, потом желания... И вот теперь и время появилось и желание, но воз пока и ныне там же.

                Вопрос состоит в следующем. В качестве учебного эксперимента решил переписать под IAR свой асмовый модуль под USART. И снова сразу же наткнулся на какие-то сишные грабли при передаче парметра в функцию. Делаю вот так:
                ExpandedWrap disabled
                  #define SYS_CLK = 14745600UL
                  #define USART_BAUD = 57600
                  #define BAUD_CONST (SYS_CLK / (16 * USART_BAUD) - 1)
                   
                  void InitUSART(unsigned int BaudConst);
                   
                  void main(void)
                  {
                    InitUSART(BAUD_CONST);  //<-- Компилятор ругается на эту строку
                  }
                   
                  void InitUSART(unsigned int BaudConst);
                  {
                    UBRRH = (unsigned char)BaudConst >> 8;
                    UBRRL = (unsigned char)BaudConst;
                  }

                При компиляции идет ругань на указанную строчку в виде текста "expected expression". При этом если в параметр функции подставить конкретное число все компилируется нормально, а вот с макроподстановкой BAUD_CONST не хочет. Подскажите плиз где я тут на грабли наступаю. Уже весь мануал по языку триста раз скурил, но по той скудной инфе что там есть никак не могу раздуплиться по работе с макросами. В чем мой косяк?
                  Цитата ir0407 @
                  При компиляции идет ругань на указанную строчку в виде текста "expected expression".
                  Естественно будет ругань. Убери символ = из макроопределений. Иначе у тебя после развертывания макросов получается ( = 14745600UL / (16 * = 57600) - 1)
                  Сообщение отредактировано: trainer -
                  Во имя Ctrl, Alt и святаго Del, Enter!

                  Основам программирования не обучаю. Не интересно.
                    Гы... :D Ёкереный бабай... Точно! Вот что значит сила привычки. Спасибо большое.
                      Всю ветку прочитал.
                      Есть проект, написан в IAR.
                      Напарник передаёт мне исходный код, у него компиляция выдаёт hex-файл размером в 96кб, а у меня копия такого же проекта выдаёт hex-файл размером в 146кб.
                      Проверили настройки в Project - Options:
                      - Debugger - Driver: ST-Link (для него делаем).
                      - С/С++ compiler - Optimizations - Level: High.
                      - Linker - Config - Linker Configuration File: Задали Override default (задана копия файла как и у напарника).

                      Засада в том, что мой hex-файл размером в 146кб никак не подходит для прошивки прибора (прошивальщики что в IAR, что фирменный STM32 не могут прошить им, ругаясь на слишком большой размер - это факт). А hex-файл размером в 96кб, получаемый при компиляции у напарника, прекрасно подходит (но его надо отлаживать далее при приборе).

                      Вобщем, надо выяснить причину, почему IAR выдаёт hex-файл повышенного размера.
                      HELP. :help:
                        Если в настройках проекта все идентично - разница может быть из-за разных версий компиляторов и/или библиотек
                        Во имя Ctrl, Alt и святаго Del, Enter!

                        Основам программирования не обучаю. Не интересно.
                          trainer версии сравнили - у меня поновей, по мнению напарника это не должно влиять. Также обратил внимание, что у меня нет прав на запись в каталоге программы IAR, в каталоге Program Files. Пытаюсь получить права администратора - у нас на работе это не просто сделать. :)
                            Цитата VLeshka @
                            Также обратил внимание, что у меня нет прав на запись в каталоге программы IAR, в каталоге Program Files.
                            А зачем тебе нужны права туда? :blink:
                            Во имя Ctrl, Alt и святаго Del, Enter!

                            Основам программирования не обучаю. Не интересно.
                              trainer только предположение, что это влияет. Другой теории, куда надо идти, нет.
                                Аааа... Ну тогда переустанови Windows. Точно поможет.

                                runtime у вас, очевидно, разного размера.
                                IAR, если я правильно помню, в map-файлах умеет выдавать размеры откомпилированных функций и объектов. Можно сравнить.
                                Во имя Ctrl, Alt и святаго Del, Enter!

                                Основам программирования не обучаю. Не интересно.
                                  trainer переустановка помогла бы, особенно с установкой прав админа для меня.:)
                                  Вобщем, на одном и том же комьпютере, "до меня", под логином администратора всё было нормально. Под моим логином, гостя, как мной и описано. В итоге просто "перебазировался" с приборами на свой компьютер с моими администраторскими правами.
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script Execution time: 0,1836 ]   [ 17 queries used ]   [ Generated: 22.01.18, 21:58 GMT ]