Эта тема
- Везде
-
- Эта тема
- Этот форум
-
- Расширенный поиск
Поиск
Форум РадиоКот • Просмотр темы — STM32 Первый старт
Сообщения без ответов | Активные темы
ПРЯМО СЕЙЧАС: |
Автор | Сообщение | |||
---|---|---|---|---|
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Сб авг 04, 2012 12:22:05 |
|||
Родился
Зарегистрирован: Сб авг 04, 2012 12:16:29 Рейтинг сообщения: 0
|
Всем привет, Развел тут минимальную плату для stm32f103 (usb + uart + swd). Поскольку моя предыдущая плата так и не завелась — прежде чем пускать в «производство» хотелось бы спросить у котов:
Заранее спасибо.
|
|||
Вернуться наверх |
Профиль
|
|||
Реклама | |
|
|
romazan
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Сб авг 04, 2012 17:43:32 |
||
Зарегистрирован: Чт май 21, 2009 13:54:07 Рейтинг сообщения: 0
|
рекомендую использовать выводы МК по полной — не подключенные выводы вывести хотя бы на штыревые разъемы, бывает порой нужно пару тройку, также сделать отдельные с «земляным» для интерфейсов (SPI, UART, I2C….) |
||
Вернуться наверх | |||
Реклама | |
|
|
SubDia
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс авг 05, 2012 04:26:16 |
||
Карма: 9 Рейтинг сообщения: 0
|
Кой-чего позабыли. =) |
||
Вернуться наверх | |||
Satyr
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс авг 05, 2012 08:24:28 |
||
Карма: 26 Рейтинг сообщения: 0
|
SubDia писал(а): 5. Кварц не нужен, стартанет от HSI на 16 МГц. Более подробно — смотрите сорцы IAP. смотри внимательнее _ там усб нужен |
||
Вернуться наверх | |||
Реклама | |
|
Выгодные LED-драйверы для решения любых задач КОМПЭЛ представляет со склада и под заказ широкий выбор LED-драйверов производства MEAN WELL, MOSO, Snappy, Inventronics, EagleRise. Линейки LED-драйверов этих компаний, выполненные по технологии Tunable White и имеющие возможность непосредственного встраивания в систему умного дома (димминг по шине KNX), перекрывают практически полный спектр применений: от простых световых указателей и декоративной подсветки до диммируемых по различным протоколам светильников внутреннего и наружного освещения. Подобрать LED-драйвер>> |
SubDia
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс авг 05, 2012 13:04:13 |
||
Карма: 9 Рейтинг сообщения: 0
|
Блеать. 0_о |
||
Вернуться наверх | |||
Реклама | |
|
|
Реклама | |
|
LIMF – источники питания High-End от MORNSUN со стандартным функционалом на DIN-рейку На склад Компэл поступили ИП MORNSUN (крепление на DIN-рейку) с выходной мощностью 240 и 480 Вт. Данные источники питания обладают 150% перегрузочной способностью, активной схемой коррекции коэффициента мощности (ККМ; PFC), наличием сухого контакта реле для контроля работоспособности (DC OK) и возможностью подстройки выходного напряжения. Источники питания выполнены в металлическом корпусе, ПП с компонентами покрыта лаком с двух сторон, что делает ее устойчивой к соляному туману и пыли. Изделия соответствуют требованиям ANSI/ISA 71.04-2013 G3 на устойчивость к коррозии, а также нормам ATEX для взрывоопасных зон. Подробнее>> |
metcenger
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс дек 30, 2012 14:11:06 |
Зарегистрирован: Ср ноя 17, 2010 01:03:44 Рейтинг сообщения: 0
|
настраиваю IAR для первого старта под плату STM32L-Discovery (STM32L152RBT6) сразу 12 ошибок. Кто может подсказать- чего не так ему? Чего не подключил? |
Вернуться наверх | |
SubDia
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс дек 30, 2012 14:37:05 |
||
Карма: 9 Рейтинг сообщения: 0
|
сделайте скриншот (с воплями IARа) и прикрепите. Ваш проект запускать и отлавливать ошибки как-то не очень интересно. |
||
Вернуться наверх | |||
metcenger
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс дек 30, 2012 15:02:37 |
Зарегистрирован: Ср ноя 17, 2010 01:03:44 Рейтинг сообщения: 0
|
может хидер он не видит? Или что-то подобное простое? |
Вернуться наверх | |
HHIMERA
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс дек 30, 2012 15:19:56 |
Карма: -18 Рейтинг сообщения: 0
|
|
Вернуться наверх | |
HHIMERA
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс дек 30, 2012 15:22:04 |
Карма: -18 Рейтинг сообщения: 0
|
SubDia писал(а): Ваш проект запускать и отлавливать ошибки как-то не очень интересно. Понятно… пейсатые гейрои всегда идут в обход… |
Вернуться наверх | |
metcenger
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс дек 30, 2012 17:00:16 |
Зарегистрирован: Ср ноя 17, 2010 01:03:44 Рейтинг сообщения: 0
|
HHIMERA писал(а): SubDia писал(а): Ваш проект запускать и отлавливать ошибки как-то не очень интересно. Понятно… пейсатые гейрои всегда идут в обход… там не так просто было- вернее, я все правильно описал, как в примере. теперь опять затык- и я правильно понял, что ничего из CMSIS не надо проекту подцеплять? типа этого stm32vldiscovery_packageLibrariesCMSISCM3CoreSupportcore_cm3.c stm32vldiscovery_packageLibrariesCMSISCM3CoreSupportcore_cm3.h tm32vldiscovery_packageLibrariesCMSISCM3DeviceSupportSTSTM32F10xsystem_stm32f10x.c tm32vldiscovery_packageLibrariesCMSISCM3DeviceSupportSTSTM32F10xsystem_stm32f10x.h |
Вернуться наверх | |
SubDia
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс дек 30, 2012 22:12:27 |
||
Карма: 9 Рейтинг сообщения: 0
|
HHIMERA писал(а): SubDia писал(а): Ваш проект запускать и отлавливать ошибки как-то не очень интересно. Понятно… пейсатые гейрои всегда идут в обход… Не скалься, а? «Гей рой.» Первый же конфликт начинаешь. metcenger писал(а): теперь опять затык- А ему надо функцию «SystemInit», реализация которой находится в system_stm32l1xx.c. metcenger писал(а): и я правильно понял, что ничего из CMSIS не надо проекту подцеплять? типа этого Надо. Все, как описывает ТС той статьи, на которую указывает HHIMERA. Только для Вашего МК, разумеется. |
||
Вернуться наверх | |||
metcenger
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вс дек 30, 2012 22:55:23 |
Зарегистрирован: Ср ноя 17, 2010 01:03:44 Рейтинг сообщения: 0
|
да, подключил тот файл, кроме stm32vldiscovery_packageLibrariesCMSISCM3CoreSupportcore_cm3.c теперь еще проблема- не могу прошить из ИАРа ничего. Если файл скомпилированный зашиваю через STM32 ST-LINK Utility, то зашивается и работает нормально. ошибки IAR выдает такие: Fatal error: ST-Link Connection error Session aborted! |
Вернуться наверх | |
wellcom
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Пн дек 31, 2012 21:40:56 |
||
Зарегистрирован: Чт фев 24, 2011 13:00:49 Рейтинг сообщения: 0
|
С новым годом всех! Хороших паяльников и живучих чипов! |
||
Вернуться наверх | |||
HHIMERA
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вт янв 01, 2013 02:51:28 |
Карма: -18 Рейтинг сообщения: 0
|
Отключите JTAG… типа… Код: AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE; /*!< JTAG-DP Disabled and SW-DP Enabled */ и настройте PB3 как обычно… |
Вернуться наверх | |
wellcom
|
Заголовок сообщения: Re: STM32 Первый старт Добавлено: Вт янв 01, 2013 13:35:17 |
||
Зарегистрирован: Чт фев 24, 2011 13:00:49 Рейтинг сообщения: 0
|
Спасибо, еще нужно включить этот AFIO Код: RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; //*!< Alternate Function I/O clock enable */ |
||
Вернуться наверх | |||
Кто сейчас на форуме |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
SergeyYe 8 / 8 / 0 Регистрация: 09.02.2019 Сообщений: 35 |
||||
1 |
||||
01.11.2021, 23:06. Показов 1046. Ответов 7 Метки нет (Все метки)
Таким образом инициализирую TIM4 и пытаюсь обработать прерывание.
Но IAR отказывается его компилировать. Имя обработчика отсутствует в *.map файле проекта. Поэтому при наступлении прерывания улетаю в HardFault_Handler. А оттуда, как известно, возврата нет. Странно и то, что обработчик не компилируется даже как обычная функция. Возможно, у меня не подключен к проекту файл с таблицей прерываний. Но я не знаю, в каком файле она находится.
__________________
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
01.11.2021, 23:06 |
Ответы с готовыми решениями: Stm32 в IAR на C++ STM32 + IAR Подскажите, пожалуйста, как подключить STM32 через jtag порт к IAR? Использую… stm32 iar прерывания STM32 + SSD1963 + IAR 7 |
206 / 159 / 36 Регистрация: 15.11.2012 Сообщений: 762 |
|
02.11.2021, 01:24 |
2 |
скачайте библиотеку stmcube (не программу) для вашего контроллера (они по сериям), там найдите файлы с расширением .s.
1 |
SergeyYe 8 / 8 / 0 Регистрация: 09.02.2019 Сообщений: 35 |
||||
02.11.2021, 11:09 [ТС] |
3 |
|||
скачайте библиотеку stmcube И где её взять? На http://st.com не нашёл.
не подключаются.
0 |
38 / 31 / 9 Регистрация: 29.03.2019 Сообщений: 345 |
|
02.11.2021, 12:30 |
4 |
SergeyYe, https://www.st.com/en/embedded… ges.html#2
1 |
206 / 159 / 36 Регистрация: 15.11.2012 Сообщений: 762 |
|
02.11.2021, 12:41 |
5 |
не подключаются его нужно не через include подключать, а добавлять в проект (Project — Add Files…).
1 |
8 / 8 / 0 Регистрация: 09.02.2019 Сообщений: 35 |
|
02.11.2021, 14:13 [ТС] |
6 |
оттуда стартап файл взять Стартап у меня есть. Я его не правильно в проект включал (директивой #include).
его нужно не через include подключать, а добавлять в проект (Project — Add Files…). После сборки обработчик в проекте появился. Но появилась ещё одна проблемка — компилятор ругается на строку EXTERN SystemInit в начале файла startup_stm32f103xb.s. Говорит,что: Error[Li005]: no definition for «SystemInit» [referenced from C:STM32_ProjectsBrain_IARDebugObjstartup_stm3 2f103xb.o].
0 |
206 / 159 / 36 Регистрация: 15.11.2012 Сообщений: 762 |
|
02.11.2021, 14:15 |
7 |
Сообщение было отмечено SergeyYe как решение Решение
EXTERN SystemInit Так я же написал все уже. Либо определить функцию SystemInit, либо убрать ее вызов в .s файле.
1 |
8 / 8 / 0 Регистрация: 09.02.2019 Сообщений: 35 |
|
02.11.2021, 14:23 [ТС] |
8 |
Либо определить функцию SystemInit, либо убрать ее вызов Вы правы. Из опухшей головы через правое ухо вылетело.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
02.11.2021, 14:23 |
Помогаю со студенческими работами здесь IAR для stm32 Прерывание: IAR+STM32+EXTI0 STM32 + IAR + FreeRTOS, писать на C или C++ «Наложение» переменных. STM32, IAR, возможно? STM32 independent watchdog и дебаг в IAR Как я понимаю independent watchdog, однажды заведенный,… Среда программирования IAR Embedded Workbench для STM32. Ошибка при запуске stm32 и IAR Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 8 |
Error li005 no definition
На этой страничке решил собрать ошибки, возникающие при компиляции, линковке, отладке в IDE IAR Embedded Workbench for ARM, и методы их устранения.
Ошибка произошла из-за того, что я вынес в отдельный файл pins.c определения составных переменных:
Ошибка [Pe070] возникала потому, что макрос PIO_LISTSIZE не мог вычислить sizeof(list). Решение: в pins.h указать размер массива. Связано с неудобствами — нужно следить за синхронизировать pins.c и pins.h. Устранение ошибки:
//[Файл pins.h]
extern const Pin pinsCol [ 4 ] ;
На языке C одиночный оператор может состоять из нескольких строк текста. Принято, что не последняя строка такого оператора должна завершаться обратным слешем ().
Многострочные операторы часто используют для задания массивов символов, и при этом легко допустить ошибку, нечаянно пропустив в одной из строк обратный слеш (причем такую ошибку бывает трудно обнаружить). Компилятор выдаст примерно следующее сообщение об ошибках:
Error[Pe008]: missing closing quote C:папкамодуль.c 19
Error[Pe007]: unrecognized token C:папкамодуль.c 23
Error[Pe065]: expected a «;» C:папкамодуль.c 23
Пример оператора с ошибкой и без ошибки:
Пропущенный слеш нужно искать в строке перед второй ошибкой.
[Случай 1]
Долго не мог разобраться, почему возникала ошибка Error[Pe147]: declaration is incompatible with «TParams const __data папка_проектаvars.c 22 paramDefault» (declared at line 22). У меня была задана структура TParams как тип:
Грешил даже на то, что структура назначалась как переменной, так и константе:
Оказалось все проще (хотя сразу не разобрался потому, что компилятор не указывал на это место) — я просто забыл ключевое слово const в хедере, где предварительно объявлялись param и paramDefault. Было там так (это ошибочно):
А для исправления ошибки должно быть так:
[Случай 2]
При портировании проекта BIGTREETECH TFT35 V3.0 из среды Visual Studio Code (VSC, VSCode) на IAR столкнулся с ошибкой несовместимости определений в iccarm_builtin.h и core_cm3.h:
1. Удалить файл core_cm3.h, либо переименовать его вcore_cm3.h.old.
2. Зайти в свойства проекта, в разделе General Optoins -> закладка Library Configuration поставить галочку «Use CMSIS».
Иногда после продолжительных правок трудно найти место, где пропустили точку с запятой. Например, компилятор неожиданно выдает ошибки на синтаксис в файле kbmatrix.h, который Вы даже не исправляли:
Remark[Pe082]: storage class is not first C:asmtestprojectincludekbmatrix.h 25
Error[Pe065]: expected a «;» C:asmtestprojectincludekbmatrix.h 25
Error[Pe757]: variable «KeyEventCallback» is not a type name C:asmtestprojectincludekbmatrix.h 54
Error[Pe757]: variable «KeyEventCallback» is not a type name C:asmtestprojectincludekbmatrix.h 67
Error while running C/C++ Compiler
Для того, чтобы найти действительное место ошибки, нужно найти все включения файла kbmatrix.h — перед ним наверняка будут другие включаемые заголовки, в которых допущена ошибка. Запускаем общий поиск по всему проекту, для чего жмем Ctrl+F и в строке поиска указываем kbmatrix.h. Переключатель «Look in» должен стоять на «Project files and all include files».
После поиска получим список файлов, которые включают директивой #include файл kbmatrix.h:
C:asmtestprojectkbmatrix.c 4 #include «kbmatrix.h»
C:asmtestprojectincludepins.h 3 #include «kbmatrix.h»
C:asmtestprojectpins.c 6 #include «kbmatrix.h»
———-
Found 3 instances. Searched in 270 files.
В одном из этих найденных файлов (kbmatrix.c, pins.h, pins.c), перед #include «kbmatrix.h» включаются другие файлы, в которых допущена ошибка. Теперь место пропущенной точки с запятой найти легко. В моем примере ошибка была в исправленном файле mytypes.h. Вот содержимое файла pins.h (он был в списке найденных), где добавлялся заголовок mytypes.h с ошибкой:
#include «settings.h»
#include «mytypes.h»
#include «kbmatrix.h»
..
Просмотрев список включаемых файлов, перед #include «kbmatrix.h», я увидел файл, который исправлял — mytypes.h, в нем как раз и была ошибка (пропущена точка с запятой после определения типа структуры).
[Причина 1]
Возможно, что пропущено словечко void в параметрах при определении функции. Пример:
Исправить нужно так:
Пример лога ошибок:
Определение FILE находится в заголовочном файле stdlib.h, поэтому нужно подключить его директивой #include. Однако иногда этого недостаточно, потому что поддержка FILE присутствует только в варианте выбора библиотек Full, но может быть выбран другой вариант — None или Normal с целью экономии памяти встраиваемых систем. Чтобы использовать FILE, необходимо переключиться на полный вариант стандартных библиотек это делается опцией командной строки компилятора —dlib full. Либо можно это настроить в диалоге свойств проекта (Options. ) -> General Options -> Library Configuration -> Library: поставьте Full:
Имейте в виду, что полный вариант стандартных библиотек (Full) приведет к намного большему объему кода. Поэтому если Вы используете FILE только для печати диагностических сообщений в stderr, то лучше использовать какой-нибудь другой способ вывода сообщений.
[Причина 2]
Если в свойствах проекта, раздел C/C++ Compiler -> C dialect стоит галочка «Require prototypes», то для не переопределенных weak-функций это будет гарантированно вызвать ошибку.
Снимите эту галочку, и ошибка Pa045 пропадет.
Проблема в том, что в блоке памяти [0x00100000-0x001002db] находится код, до которого не могут достать ассемблерные команды короткого перехода, находящиеся в ассемблерном коде (обычно в других модулях). В этом случае нужно править ассемблерный код, чтобы переходы были длинными, либо переписать код с ассемблера на C (тогда компилятор сам подставит нужные команды). Другое решение указать компилятору генерировать код для режима процессора не thumb, а arm (Свойства проекта (Options. ) -> General Options -> C/C++ Compiler -> Processor mode -> Arm).
Чтобы сгенерировать карту памяти и статистику линковки (это поможет найти проблему), откройте свойства проекта (Options. ) -> General Options -> Linker -> List -> Поставьте галочки на «Generate linker map file» и на «Generate log file», а также все галочки ниже на опциях лог-файла. Лог-файл см. в файле имя_конфигурацииListимя_проекта.log, а карту распределения памяти в файле имя_конфигурацииListимя_проекта.map.
Предупреждение возникало при попытке вызвать из кода на C функцию abs, пример:
Дело в том, что на простом C (не C++) нельзя распознать прототип функции abs по типу переменной. Только для C++ можно автоматически подставить нужный прототип abs (для разных типов аргументов на C++ имеются разные реализации abs). В данном случае в параметре была переменная типа float, а определение abs подразумевало в параметре целый тип. На самом деле на C нужно напрямую вызывать abs с нужным функционалом по отдельному имени, здесь подойдет fabsf:
Пример кода, который генерирует предупреждение Pa091:
Причина ошибки в том, что оператор инверсии
делает приведение типа unsigned char к типу signed int перед инверсией. Для того, чтобы пропало предупреждение, нужно перед инверсией дополнительно вставить ключевое слово unsigned:
Такая ошибка возникает при логических операциях с константами из перечисления (которые определены через enum). Вот пример кода, который генерирует предупреждение Pe188:
Причина предупреждения в том, что результатом логической операции будет целочисленный тип, а не тип enum. Исправить можно, если явно указать, что результат операции будет иметь тип перечисления:
Когда 2 заголовочных файла ссылаются друг на друга директивой #include, то могут возникнуть ошибки Error[Pe020]: identifier «имя_идентификатора» имя_файла.h номер строки is undefined (упомянутый идентификатор не найден). К примеру, в заголовочный файл headerA.h подключен файл headerB.h, и также к файлу headerB.h подключен файл headerA.h — тогда блок защиты от повторного включения заголовка [2] не даст видимости всех нужных имен, определенных в первом подключенном заголовке.
Для того, чтобы исправить эту ситуацию, требуется создать третий заголовок headerC.h, который будет содержать общие для headerA.h и headerB.h определения, и подключить headerC.h в headerA.h и headerB.h, чтобы они не ссылались друг на друга.
Постоянно достают предупреждения компилятора IAR о неправильной строке форматирования (printf, sprintf, sscanf): «IAR EWB ARM: Remark[Pe181]: argument is incompatible with corresponding format string conversion».
Избавиться от таких предупреждений поможет правильный выбор опции форматирования вывода printf. Для подробной информации см. [3].
- Функция printf, аргумент u8 (unsigned char), строка формата %u -> надо поменять формат на %i.
- Функция printf, аргумент u16 (unsigned short), строка формата %u -> надо поменять формат на %i.
- Функция sscanf, аргумент u8 (unsigned char), строка формата %u или %i -> надо поменять формат на %hu, а тип аргумента на u16 (unsigned short).
Ошибка может возникнуть, если неправильно определена переменная структуры, например:
Исправить предупреждение Pe1000 можно, если правильно указать экземпляр переменной структуры:
[140110]
Вопрос: мне нужно кастомизировать вывод на собственное устройство отображения (LCD). Все сделал, как написано в документации IAR — определил внешнюю функцию MyLowLevelPutchar, раскомментировал функцию __write, но почему-то при вызовах printf и putchar вывод на LCD не происходит. Функция __write не вызывается, и код, который я написал в теле функции MyLowLevelPutchar, не работает. В чем проблема?
Ответ: Вы все сделали правильно, но кроме этого в некоторых версиях IAR (например 4.20) необходимо особым образом выбрать конфигурацию библиотек DLIB. Это делается через свойства проекта General Options -> Library Configuration -> Library. Попробуйте из выпадающего списка выбрать вариант Normal, и если не заработает, то попробуйте выбрать Full. У меня иерархия вызовов в IAR версии 4.20 работала почему-то следующим образом: если выбрать Full, то последовательность вызова получается printf -> .. -> putchar -> fputc, и в этом варианте ничего не работало (код в MyLowLevelPutchar не вызывается). Если выбрать Normal, то тогда цепочка вызовов printf -> .. -> putchar -> __write, и в этом случае перенаправление вывода работает (потому что в функция __write вызывает пользовательский код из MyLowLevelPutchar).
[140312]
Такая ошибка возникает, когда Вы перенесли проект в другую папку, но перед запуском отладки не сделали очистку и не перекомпилировали проект. В отладочных файлах запомнились старые абсолютные пути до фалов исходного кода, которые теперь не соответствуют реальным. Чтобы исправить ошибку, выберите пункт меню Project -> Clean, после чего запустите отладку. Проект скомпилируется заново, и теперь отладка запустится без ошибки.
[140515]
Для больших проектов время компиляции может составлять большую проблему. Есть несколько советов, как можно уменьшить время компиляции.
1. Убедитесь, что в каждом заголовочном файле у Вас есть защитные заголовки, например:
Подробнее про защитные заголовки см. [4]. Кроме того, проверьте файлы исходного кода на лишние подключения заголовков директивой #include. Этот фактор значительно влияет на скорость компиляции.
2. Создайте предварительно скомпилированные библиотеки, куда поместите редко изменяемые модули: BSP (Board Support Package, пакет поддержки платы разработчика), стеки протоколов и т. д. Это нужно делать периодически для кода, который остается неизменным, и который не нужно перекомпилировать каждый раз, когда что-то меняется в коде приложения. Подробнее см. [5].
3. Запретите генерацию файлов листинга компилятора (Options -> C/C++ Compiler -> List).
4. Если некоторые файлы находятся на сетевом диске (даже если это RAM-диск на сервере), попробуйте сделать их локальными, т. е. скопировать на жесткий диск рабочей станции, и компилировать оттуда. Если это ускорит компиляцию, то значит имелись проблемы, связанные с сетевой файловой системой (NFS/Samba).
5. Если совет 4 помог (при использовании локального диска компиляция ускорилась), то может помочь размещение на локальном диске только объектных файлов и файлов листинга. Для этого измените настройки Project -> Options -> General Options -> Output. Сконфигурируйте пути «Object files» и «List files» так, чтобы они были размещены не на сети, а локально.
6. Если при компиляции бывают случаи, что процесс сильно замедляется или среда IAR зависает, то возможно, что в этот момент происходит сканирование рабочих файлов антивирусом. Такой случай может привести также к сообщениям о запрещенном доступе (denied permission), об истечении таймаута.
Для того, чтобы исключить проверку антивирусом папок IAR, нужно добавить в исключения антивируса следующие папки:
• Инсталляционный каталог IAR (например, это может быть папка C:Program FilesIAR SystemsEmbedded Workbench 5.4).
• C:Program FilesCommon FilesIAR Systems
• C:Documents and Settings USERNAME Application DataIAR Embedded Workbench
Здесь USERNAME означает имя (логин пользователя), под которым Вы работаете в системе Windows. Полное имя до этой папки может зависеть от версии операционной системы Windows.
7. Создайте RAM-диск, и попробуйте компилировать проект на нем. Будьте осторожны, поскольку при пропадании питания или зависании компьютера вся Ваша работа потеряется! Как промежуточный вариант, можно на RAM-диск сохранять только объектные файлы, файлы листинга и выходные файлы, для этого в свойствах проекта General Options -> Output поменяйте пути до выходных рабочих директорий Output directories.
Самое простое средство для создания RAM диска — бесплатная программа SoftPerfect RAM Disk site:softperfect.com.
[161019]
При попытке компиляции выскакивают совершенно неожиданные ошибки — невозможно удалить файл, который либо вообще не используется в проекте, либо находится в каталоге установки IAR. Например, у меня появлялась вот такая ошибка, когда я попробовал сменить конфигурацию Release на Debug:
Очевидно, что это полный бред — зачем очистке понадобилось вдруг удалять файл wchar.h, который относится к стандартным библиотекам, да и еще находится в каталоге установки среды разработки IAR Embedded Workbench.
Причина ошибки заключается в том, что произошла рассинхронизация конфигураций Release и Debug. Конфигурация Debug давно не использовались, в то время как конфигурацию Release вносились изменения. Похоже, что глючит обработчик списка зависимостей, причем могут происходить даже еще более неприятные глюки, вплоть до удаления рабочих заголовочных файлов проекта (поэтому чаще делайте бэкапы!).
Решение проблемы заключается в просмотре обоих конфигураций и внесение корректных изменений в конфигурацию, где происходит эта ошибка. Особенно внимательно следует проверить дополнительные пути поиска подключаемых файлов, а также наличие предварительно определенных переключающих макросимволов (Project -> Options -> C/C++ Compiler -> Preprocessor).
Довольно часто появляющаяся ошибка в разных версиях IAR. Разработчики борются с этой ошибкой, и с переменным успехом. Обычно проблема решается, если несколько раз выполнить операцию очистки (Project -> Clean). Иногда помогает перезапуск IAR + выполнение очистки проекта.
Еще одна из причин такой ошибки — в проекте имеется 2 подключенных исходных файла, компиляция которых приводит к генерации одного и того же объектного файла. Например, есть две версии одного и того же модуля — один на языке C (с расширением *.c), и другой оптимизированный, на ассемблере (с тем же именем, но с расширением *.s). Решение проблемы очевидно — нужно исключить из процесса компиляции один из этих файлов.
Чтобы переименовать workspace, но сохранить при этом в нем те же самые имена проектов, что и были раньше, просто переименуйте файл *.eww.
Поскольку среда разработки IAR EWB не предоставляет прямого функционала для специального переименования проекта, требуется обходной путь для этого действия. Когда я переименовываю workspace и связанный с ним проект, то поступаю следующим образом:
1. Делаю копию Template.ewp (это файл проекта) и переименовываю копию, скажем, в NewProject.ewp.
2. Открываю файл workspace Template.eww.
3. Выбираю Project -> Add Existing Project.
4. Выбираю NewProject.ewp и кликаю Open.
5. Выбираю закладку «Template» в нижней части списка файлов Workspace (соответствует старому проекту).
6. Делаю правый клик на старом проекте и выбираю Remove.
7. Закрываю IAR EWB, он запросит сохранить workspace, сохраняю.
8. Переименовываю файлы старого workspace *.eww, *.ewd в NewProject.eww, NewProject.ewd (и также файл *.dep, если он у Вас есть).
9. Удаляю Template.ewp.
После этого Вы сможете открыть NewProject.eww как полностью переименованное workspace и полностью переименованный проект. Если Вы хотите только переименовать проект, и оставить старое имя для workspace, то выполните только шаги 1..7.
[170621]
Заголовочный файл lib_AT91SAM7X256.h, в IAR 6.50 выскакивают ошибки на код с операторами __inline:
Проблема в том, что для встраиваемых функций поменялся синтаксис: замените __inline на inline, и ошибка исчезнет.
На языке C, в отличие от C++, нет определения булевого типа. Поэтому либо подключите в коде C заголовочный файл stdbool.h:
Либо добавьте в общий заголовочный файл (например types.h) следующее определение:
Это глюк, связанный с файлами нулевой длины. Найдите файл, на который указывает сообщение, и удалите его.
[171204]
Неожиданный глюк, который начал происходить без видимых причин (наблюдалось на IAR 6.50.3 и Windows 7). При попытке компиляции выскакивает ошибка «General exception during build», которая сопровождается ошибкой очистки «General exception during clean». Причем в конфигурации Debug проект компилируется нормально, а в конфигурации Release происходит ошибка.
Ресурс по известным проблемам IAR [6] советует выполнить переустановку IAR в другой каталог на диске, или переименовать папку текущей инсталляции: «Install another copy of your IAR Embedded Workbench product in a different location or rename the directory of your current installation».
Мне помогло следующее — полностью удалил с диска корневую папку проекта, и восстановил её копированием из архива бекапа. После этого ошибка волшебным образом исчезла.
Замечание, сигнализирующее о возможной логической ошибке в операторе switch. Вот пример из библиотеки EFSL, генерирующий такое предупреждение компилятора (Pe1814 на строке 40):
Это пример не очень аккуратного кодирования: оператор swith проверяет переменную value, и эта же переменная проверяется оператором if в default-блоке того же оператора swith. Очевидно, что здесь скорее всего используется не только ненужная проверка if, но и блок else этого оператора if никогда не выполнится.
В TN43262 [7] объясняется, как нужно работать с абсолютно размещаемыми переменными. Проблема с такими переменными заключается в том, что в некоторых ситуациях разработчик получает сообщение об ошибке линкера «переменная не определена». Это может быть связано с тем, что такая переменная должна быть определена специальным, не интуитивно понятным способом.
Решение состоит в том, чтобы определить и разместить переменную в заголовочном файле, который будет подключаться во все исходные файлы, ссылающиеся на эту переменную.
[Дополнительная информация]
Переменные, которые размещаютсы по абсолютному адресу, ведут себя немного не так, как обычные не автоматические переменные C/C++. Абсолютно размещамеые переменные находятся в абсолютном сегменте, таком как ABSOLUTE или xxxx_AN. Абсолютный сегмент не представлен файле линкера, поскольку переменные уже размещены во время компиляции.
Другие (обычные) не автоматические переменные, находящиеся в модуле исходного кода, размещаются в перемещаемый сегмент, который описывается в файле линкера как обычно. Поэтому разрешение адреса осуществляется во время линковки.
Не очевидное поведение: каждое определение абсолютно размещенной переменной в действительности локально для текущей компилируемой единицы (файла исходного кода), поэтому Вы можете (и должны) иметь определение этой переменной для каждого элемента компиляции (модуля исходного кода). Несколько таких одновременных определений не приведут к ошибке во время линковки или ошибке во время выполнения (если Вы идентично определили абсолютную переменную во всех местах, где она используется). Если Вы не используете абсолютно размещенную переменную, то она выбрасывается из единциы компиляции. Если же Вы должны её использовать, то она должна быть представлена в выходном файле по двум причинам. Во-первых, переменная используется, поэтому она должна требовать своего абсолютного размещения на этапе линковки. Во-вторых, это позволяет линкеру проверить, что эти определения соответствуют друг другу во всех модулях.
Другими словами, для абсолютной переменной Вы должны разместить в заголовочном файле определение (не декларацию, как это обычно делается), если используете переменную в нескольких файлах. Пример такого заголовочного файла setup.h:
После этого просто добавьте подключение файла setup.h во все файлы исходного кода, где должна использоваться переменная.
Один из способов запомнить — думать об этом как о наличии #define для описания размещения в памяти, с добавлением наличия способности линкера проверить его непротиворечивость.
[Другой способ абсолютного размещения переменной]
Если Вы вместо этого поместите объект в именованный сегмент:
то должен быть определен сегмент SETUP, и он должен быть размещен в файле линкера. Переменные, размещенные в сегменте, ведут себя как обычные переменные языка C, для них поместите следующую декларацию в файл заголовка:
И затем Вам нужно поместить определение в один (и только в один) исходный файл:
Если Вам не нравится @-синтаксис, есть его эквивалент, который можно использовать альтернативно:
Источник
I am having a strange problem. I am trying to integrate the spi module from Nordic Semiconductors peripherals examples with the Central BLE Uart project.
There is a library of component common to all the examples. So what I did is add the spi_slave file nrf_drv_spis.c to my project, and added the path to that component in the preprocessor paths of the project.
$PROJ_DIR$..............componentsdriversnrf_spi_slave
is in my preprocessor paths and this is where nrf_drv_spis.c and nrf_drv_spis.h are.
However, when I compiled the code, I get this error
Error[Li005]: no definition for "nrf_drv_spis_init" [referenced from D:Repoble_projectsnRF5_SDK_12.3.0examplesble_centralble_app_uart_cpca10028s130iar_buildmain.o]
nrf_drv_spis_init is a function found in nrf_drv_spis.c and the prototype is in nrf_drv_spis.h. The odd thing as well is that when I right click on nrf_drv_spis_init and «go to the definition», it always bring me to the prototype in the header file. Normally, IAR presents me with either the prototype or the definition of the function and I need to click either the declaration or the prototype.
So it does shows me that for whatever reason, the file nrf_drv_spis.c doesn’t seem to be in the project, but I don’t know what to do to fix this.
Any help would be appreciated.
Thanks.
Теги: IAR Li005 __iar_program_start
вперед из:http://www.51hei.com/stm32/3615.html
Error[Li005]: no definition for «__iar_program_start» [program entry]
IAR 6.3 Стандартная библиотека STM32 3.5. После компиляции вы не можете изменить проверку ошибки. Вам необходимо изменить следующие настройки.
Использовать нормальный или полный
Это должно быть отмечено
Интеллектуальная рекомендация
указатель-события: нет; решить проблему сбоя клика
На работе сделал выпадающий список. Фон стрелки вниз добавляется к form-select :: after, но при нажатии стрелки событие раскрывающегося списка не может быть запущено. Так что добавьтеpointer-events: n…
Как идея соединяет MySQL?
1. Открытая идея 2. Справа есть база данных, щелкните 3. Нажмите » +» 4. Продолжайте нажимать 5. Выберите MySQL 6. Введите, где находится база данных, имя пользователя, пароль, тестовое соед…
CSRF и SSRF
Введение в уязвимости CSRF CSRF (подделка межсайтовых запросов, подделка межсайтовых запросов) относится к использованию недействительной идентификационной информации жертвы (файлы cookie, сеансы и т….
Разработка управления приложениями
Получить всю информацию о приложении PackageManager Android управляет пакетами приложений через PackageManager, и мы можем использовать его для получения информации о приложениях на текущем устройстве…
Вам также может понравиться
Анализ исходного кода пула потоков -jdk1.8
openjdk адрес загрузки http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/tags Логические шаги пула потоков, с которыми поставляется Java, — это, в основном, следующие шаги: Реализация псевдокода Отправить ис…
Используйте инструменты в макете XML:
В макете, если некоторые фиксированные значения атрибута не установлены, некоторое представление не будет видно, когда будет видна макет. Все, что мы можем увидеть эффект предварительного просмотра, к…
Войдите в JVM
1. Введение в JVM 1.1 Концепция JVM Введение в виртуальную машину: JVM (аббревиатура от Java Virtual Machine. Java Virtual Machine.), JVM — это настраиваемый компьютер, которого на самом деле не сущес…
пользователи Linux и группы пользователей
Пользователь категория Профиль пользователь Root (Root пользователя) Команда Советы Упорядочить #, имеет самую высокую задачу разрешения любого разрешения файла недействительно для корневого пользоват…
Котлин Базовый — класс и атрибуты
Давайте напишем простой JavaBean класса Student в Java, только с одним свойством, имя. Тот же класс в Котлин это: PUBLIC в Котлин является видимость по умолчанию, поэтому его можно опустить. Этот вид …
Статьи по теме
- STM8 Ошибка [Li005]: Нет определения для решения XXX
- IAR использует STLINK, чтобы загрузить решение на фатальную ошибку
- IAR Error[Li005]: no definition for «device_info_get» [referenced from hal_uart.o(platform.a)]
- Ошибка IAR [PE020]: идентификатор ‘файл’ является неопределенным решением
- IAR об ошибке [Pa045]: у функции «xxx» нет прототипа
- Ошибка отчета IAR более низкой и более поздней версии
- Неустранимая ошибка [Lc002]: не удалось открыть файл в IAR
- IAR компиляция внезапной ошибки при запуске линкера
- Некоторые ошибки в отношении появления установки и использования IAR
- IAR Получите альтернативную проблему с файлом и решение
популярные статьи
- Кордова копировать плагин Кордова-плагин-буфер обмена
- О дизайне Android и его значении
- Режим программных компонентов
- npm
- Vue Mobile Phone Picture Component Component
- 0,96-дюймовый OLED-дисплей Изображение
- Информация о контенте автоматически развернута, а мышь останавливается
- Концепция Spring и система анализа псевдонимов исходного кода (2)
- Re -Learning Record от входа в тюрьму [7]
- Камень-ножницы для бумаги (машинный тест)
рекомендованная статья
- Данные сайта веб-сайта бизнес-аналитика Python Reptile
- KVM виртуальная машина примечания конфигурации
- 2020-07-27 Комиксы Упаковка и скачать CRAC
- В Windows, Maven частные службы Nexus строительства и эксплуатации
- Разделение чтения-записи конфигурации Springboot (Mybatis)
- Работа шесть
- Luogu p3238 [hnoi2014] дорожная блокировка
- Установка системы Windows System —- Windows7 Enterprise Edition Невозможно установить Net.framework4.52-4.6 Версия Win7 Solutions …
- Fiber Optic Cable vs Wireless: Which One Would You Prefer
- Stateful Future Transformation
Связанные теги
- IAR
- ST-Link
- Fatal Error
- Использование средств разработки
- cc2530
- Интернет вещей
- zigbee
- stm
- STM32
- Веб-безопасность
|