Iar fatal error pe1696 cannot open source file

Controlling Custom Build execution Technical Note 83760 11/13/2020 4:36 PM Introduction The generic feature named Custom Build can give unexpected results, such as messages about missing files. Discussion When Custom Build is not working as expected, typically files generated by the tool (invoked by Custom Build) are reported as missing. For example: Background The […]

Содержание

  1. Controlling Custom Build execution
  2. Technical Note 83760
  3. Introduction
  4. Discussion
  5. Background
  6. Solution for IDE versions 7.1.5 to 8.x.x
  7. Possible solution for older IDE versions
  8. Conclusion
  9. Controlling Custom Build execution
  10. Technical Note 83760
  11. Introduction
  12. Discussion
  13. Background
  14. Solution for IDE versions 7.1.5 to 8.x.x
  15. Possible solution for older IDE versions
  16. Conclusion
  17. Iar fatal error pe1696 cannot open source file
  18. nRF52 DK with SDK14 Blinky Example (without BLE) Compile Error by Using IAR 8.20.1

Controlling Custom Build execution

Technical Note 83760

11/13/2020 4:36 PM

Introduction

The generic feature named Custom Build can give unexpected results, such as messages about missing files.

Discussion

When Custom Build is not working as expected, typically files generated by the tool (invoked by Custom Build) are reported as missing. For example:

Background

The reason is that the project build engine executes the Custom Build tool in parallel with the compiler and the assembler. Thus, files used when compiling might be missing (for example a header file), files that the Custom Build tool will be generating.

Solution for IDE versions 7.1.5 to 8.x.x

In order to make sure that the tool called from Custom Build executes before any files are compiled, select the option Run this tool before all other tools.

There are also situations where it is desirable to run the Custom Build tool prior to linking. In IDE versions up to 8.x.x that is not possible. (For such situations, build from the command line.)

Possible solution for older IDE versions

Rename the files that the Custom Build tool invokes and then force the project dependencies to be rebuilt.

  1. Change the filename of the input files to be alphabetically sorted before all C, C++, and assembler source files. (For example, a file named input.xxx can be renamed to _input.xxx to be sorted first alphabetically.)
  2. Choose Project>Clean (This removes the .dep file and forces the project dependencies to be rebuilt.)
  3. Choose Project>Make

Steps 2 and 3 must be repeated twice (or more times), so that the dependency file (extension .dep) will be properly rebuilt.

Conclusion

In IDE versions 7.1.5 to 8.x.x, Custom Build can run prior to compilation.

For IDE versions older than 7.1.5, this technical note gives a possible solution.

All product names are trademarks or registered trademarks of their respective owners.

World leader of software and services for embedded systems development.

Источник

Controlling Custom Build execution

Technical Note 83760

Introduction

The generic feature named Custom Build can give unexpected results, such as messages about missing files.

Discussion

When Custom Build is not working as expected, typically files generated by the tool (invoked by Custom Build) are reported as missing. For example:

Background

The reason is that the project build engine executes the Custom Build tool in parallel with the compiler and the assembler. Thus, files used when compiling might be missing (for example a header file), files that the Custom Build tool will be generating.

Solution for IDE versions 7.1.5 to 8.x.x

In order to make sure that the tool called from Custom Build executes before any files are compiled, select the option Run this tool before all other tools.

There are also situations where it is desirable to run the Custom Build tool prior to linking. In IDE versions up to 8.x.x that is not possible. (For such situations, build from the command line.)

Possible solution for older IDE versions

Rename the files that the Custom Build tool invokes and then force the project dependencies to be rebuilt.

  1. Change the filename of the input files to be alphabetically sorted before all C, C++, and assembler source files. (For example, a file named input.xxx can be renamed to _input.xxx to be sorted first alphabetically.)
  2. Choose Project>Clean (This removes the .dep file and forces the project dependencies to be rebuilt.)
  3. Choose Project>Make

Steps 2 and 3 must be repeated twice (or more times), so that the dependency file (extension .dep) will be properly rebuilt.

Conclusion

In IDE versions 7.1.5 to 8.x.x, Custom Build can run prior to compilation.

For IDE versions older than 7.1.5, this technical note gives a possible solution.

All product names are trademarks or registered trademarks of their respective owners.

World leader in software tools and services for embedded systems development.

Источник

Iar fatal error pe1696 cannot open source file

Прекомпилированные библиотеки, которые созданы из модулей кода, полезно использовать в больших проектах для ускорения процесса компиляции. В библиотеки целесообразно поместить код, который не меняется в настоящий момент (когда идет работа над чем-то другим). В составе IAR есть обстоятельная документация «IAR Runtime Environment and Library User Guide» [1], однако это руководство довольно большое и сложное для изучения. Здесь представлены простые инструкции — как в проекте использовать заранее скомпилированный код в виде библиотек (prebuild library), чтобы помногу раз не перекомпилировать одни и те же файлы и экономить время разработки.

[Как создать библиотеку в IAR]

1. Создайте проект, куда добавьте модули исходного кода, которые должны быть помещены в библиотеку (меню Project -> Create New Project. -> C -> main -> OK -> укажите имя файла проекта и выберите папку, куда он будет сохранен). Удалите из проекта модуль main.c, который был создан автоматически, и добавьте в проект все модули кода, которые должны быть помещены библиотеку. Настройки нового проекта для библиотеки будут во многом копировать настройки других Ваших проектов — нужно выбрать тип процессора, уровень оптимизации, прописать пути поиска заголовков и проч.

Как вариант, можно создать пустой проект, и потом его настроить на создание библиотеки.

Процесс по шагам, На примере кода STM32_USB_Host_Library из STM32Cube_FW_F4_V1.24.0:

1. Создайте пустой проект через меню Project -> Create New Project. -> Empty Project -> OK.

IAR запросит ввести имя файла для проекта (файл с расширением *.ewp). Укажите короткое, но понятное имя, отрающее назначение будущей библиотеки. Например, для библиотеки хоста USB STM32 (STM32_USB_Host_Library) я указал имя USBhost, и сохранил этот файл в корневом каталоге библиотеки.

2. Откройте опции проекта.

В разделе General Options -> Output выберите радиокнопку Library. Как вариант, можно указать папку, куда будет сохранен выходной файл компилируемой библиотеки. Я обычно указываю этот путь относительно каталога проекта $PROJ_DIR$, см. скриншот:

3. Выберите тип процессора, для которого компилируете библиотеку, для чего перейдите в раздел General Options -> Target. Переключите радиокнопку «Processor variant» на Device, и с помощью кнопки выберите тип микроконтроллера (ST -> STM32F4 -> STM32F429 ->STM32F429ZI).

Закройте окно опций проекта кнопкой OK.

4. Добавите в проект все необходимые файлы библиотеки.

5. Теперь нужно настроить пути поиска заголовочных файлов для препроцессора. Для этого попробуйте скомпилировать проект. Конечно, компилятор может не найти некоторые необходимые заголовочные файлы, и в консоли сборки Build покажет соответствующие сообщения, например:

Снова откройте опции проекта, и в разделе C/C++ Compiler -> Preprocessor, в область ввода «Additional include directories: (one per line)» добавьте строки путей поиска заголовочных файлов, например:

Каждое добавление пути проверяйте компиляцией (F7), и продолжайте добавлять пути поиска, пока компилятор не перестанет выдавать сообщения об ошибке поиска заголовочных файлов.

6. На определенном этапе компиляции могут возникнуть другие ошибки, связанные с отсутствием в проекте некоторых символов, например определений типа процессора. Например:

Снова откройте опции проекта, и снова перейдите в раздел C/C++ Compiler -> Preprocessor. В область ввода «Define symbols: (one per line)» добавьте недостающие символы.

Снова скомпилируйте проект. В случае появления ошибок поиска заголовочных файлов повторите шаг 5.

7. В результате проект скомпилируется без ошибок, например:

В выходном каталоге появится библиотечный файл имяпроекта.a (в нашем примере USBhost.a). Теперь этот двоичный файл библиотеки можно использовать в другом проекте вместо файлов исходного кода — удалите из проекта модули исходного кода, и добавьте в проект файл скомпилированной библиотеки.

[Дополнительные настройки]

8. Можно настроить для библиотеки дополнительный уровень оптимизации кода, для чего перейдите в раздел опций C/C++ Compiler -> Optimizations. Радиокнопка Level вместе с выпадающим списком Balanced/Size/Speed/ и галочками тонкой настройки позволяют указать необходимую опимизацию, выполняемую компилятором.

Как обычно, когда разрабоатываемое приложение еще отлаживается, полезно выбрать уровень оптимизации None, тогда будут полностью доступны все символы библиотеки и отладка по её исходному коду. Если же разработка близка к завершению, обычно выбирают уровень оптимизации High -> Speed (оптимизация по скорости) или High -> Size (оптимизация по размеру).

Примечание: качественно написанный код должен одинаково хорошо работать как с включенной, так и с выключенной оптиммизацией. Переключение уровня оптимизации в общем случае хорошее средство выявления багов и узких мест в коде. Обычная ситуация — проект с отключенной оптимизацией работает, а со включенной оптимизацией не работает. Тогда разделение проекта на отдельно компилируемые библиотеки дает способ определить, какая часть кода критична к оптимизации, а какая нет.

9. Можно настроить две конфигурации проекта библиотеки — одну для отладки (Debug), другую для релиза (Release). По умолчанию при создании пустого проекта автоматически создаются эти две конфигурации Debug и Release (диалог конфигураций открывается через Project -> Edit Configurations. ):

Одна из конфигураций Debug у нас уже настроена. Теперь для настройки конфигураци и Release нужно её выбрать, и настроить в ней все необходимые опции, повторив шаги 2, 3, 5, 6. Это довольно утомительный процесс, даже с учетом того, что можно копировать опции через буфер обмена.

Но есть способ поступить проще — удалить конфигурацию Release и создать её заново на основе конфигурации Debug, при этом все опции скопируются автоматически. Останется выбрать только уровень оптимизации. Для этого откройте диалог Project -> Edit Configurations. удалите конфигурацию Release (кнопкой Remove, при этом текущей должна быть конфигурация Debug). После этого нажмите кнопку New. введите имя конфигурации (например Release) и создайте её на основе конфигурации Debug, нажав кнопку OK:

В созданной конфигурации придется заново повторить ввод выходной директории (раздел General Options -> Output, поле ввода Executables/libraries), и настроить оптимизацию (C/C++ Compiler -> Optimizations) и отключить вывод отладочной информации (C/C++ Compiler -> Output, снять галочку «Generate debug information»).

2. Откройте свойства проекта, перейдите в раздел General Options, выберите закладку Output. Переставьте радиокнопку Output file в положение Library.

3. Скомпилируйте проект. По умолчанию выходной файл библиотеки создастся в папке DebugExe, и файл получит имя проекта и расширение *.a. Это и есть прекомпилированный файл библиотеки. Теперь его нужно добавить в тот проект.

[Как добавить библиотеку в проект вместо модулей исходного кода]

1. Удалите из проекта все файлы модулей, которые были перенесены библиотеку. Проще всего, когда эти модули в проекте содержатся в отдельной папке. Тогда достаточно просто отключить от процесса компиляции в проекте папку с этими модулями, не удаляя их из проекта (впоследствии всегда можно их подключить обратно). Щелкните в дереве проекта правой кнопкой на папке, которую хотите отключить от компиляции, выберите Options. и поставьте галочку Exclude from build. Теперь эти модули компилироваться не будут. Код из этих модулей будет браться из библиотеки.

2. В проекте, куда хотите добавить библиотеку, зайдите в свойства проекта через меню Project -> Options, перейдите в раздел Linker -> закладка Library, и в поле Additional libraries добавьте полный путь до файла библиотеки. Не стесняйтесь использовать макросы IAR типа $PROJ_DIR$, чтобы удалить привязку к абсолютным путям. Например, путь до файла библиотеки может быть наподобие следующего:

3. Перекомпилируйте проект с добавленной библиотекой. Он должен скомпилироваться без ошибок.

Источник

nRF52 DK with SDK14 Blinky Example (without BLE) Compile Error by Using IAR 8.20.1

I am using IAR embedded workbench IDE — ARM 8.20.1 (full version) to compile the SDK 14.0 blinky_pca10040_s132 -nrf52832_xxaa example. However, I got some errors which is

Fatal Error[Pe1696]: cannot open source file «nrf_log_ctrl_internal.h»

Error while running C/C++ Compiler app_util_platform.c
app_error.c
nrf_assert.c
main.c
nrf_sdh_soc.c

Fatal Error[Pe1696]: cannot open source file «nrf_section_iter.h»

Error while running C/C++ Compiler nrf_sdh.c

Fatal Error[Pe1696]: cannot open source file «nrf_section_iter.h»

Error while running C/C++ Compiler system_nrf52.c
nrf_strerror.c
nrf_section_iter.c

Total number of errors: 3 (Display on IAR message box)

I already did the below step before I built the project,

  1. Open workspace -> «blinky.eww»
  2. Set active -> blinky_pca10040_s132_nf52832_xxaa
  3. Select project -> options -> Gerneral Options -> Target -> Device -> «NordicSemi nRF52832_xxAA»
  4. Select project -> options -> Debugger -> Drive -> «J-link/J-Trace»
  5. Select project -> options -> Debugger -> J-link/J-Trace -> Setup -> JTAG/SWD speed -> Fixed 4000kHz
  6. Use nrfjprog erase and reset the chip

I had no idea that why I will got these errors. Please help.

Have you done any changes in that folder structure of the SDK ? Note that IAR uses relative paths, and if you have moved any of the components and files in the SDK, or the IAR projects itself, IAR won’t be able to find the files.

Try to download a clean copy of the SDK from here, and try again.

Note that we have now released SDK 14.1, where we have added support for Segger Embedded Studio (SES) IDE. You can use Segger Embedded Studio for commercial and non-commercial purpose with Nordic Semiconductor devices free of charge.

I did not change the folder structure of the SDK 14.0. And I checked the below setting in IAR Embedded Workbench IDE, project > Option > C/C++ Compiler > Preprocessor > Additional include directories, I found that all of the needed libraries were included. For example, «nrf_sdh.c» was compiled fail as the source file «nrf_section_iter.h» could not open. This heading file was under the folder «nRF5_SDK_14.0.0_3bcc1f7componentslibrariesexperimental_logsrc», but the directories «$PROJ_DIR$. componentslibrariesexperimental_logsrc» already existed in the C/C++ Compiler > Preprocessor > Additional include directories.

It is did not make sense that the IAR still showed errors if the additional include directories settled. So, I am quite confuse about that.

That is very strange. Did you try to download, unzip, and use a «clean/new» SDK 14?

Note that we are currently using IAR Workbench 7.80.4 when doing release test of the SDK, so I would genereally recommend using that version if you are able to do that.

You can also try to download and install nRF5 MDK for IAR, and see if that helps.

Latest version is 8.15.0, you can download it from here.

There is no error any more after I compiled the sample blinky example from the new released SDK 14.4 and installed nRF5 MDK latest version 8.15.0. However, when I download the program to the nRF52 DK, a message box was shown, «Warning: Stack pointer is setup incorrect alignment. Stack addr=0xFFFFFFFF». And the LEDs on the nRF52 DK board were not blink.

Источник

I am using IAR Embedded workbench 5.51 for MSP430. I am using C99.

I am trying include code from a third party library. I have copied the directory structure of this third party library exactly within a sub-directory in my main project directory. However, when I try to compile I get a bunch of

Fatal Error[Pe1696]: cannot open source file «ThirdPartyLib/Subdir/file.h»

However in the log IAR shows:

searched: «C: … bla bla bla … SourceThirdPartyLibSubdir»

The include statements in each of the source files in this library are all like:

#include "ThirdPartyLib/Subdir/someheader.h"

I have attempted to add the path to the C preprocessor by going to:

Project -> Options -> C/C++ Compiler -> Preprocessor

and adding the lines:

$PROJ_DIR$ThirdPartyLib
$PROJ_DIR$ThirdPartyLibSubdir
$PROJ_DIR$ThirdPartyLibUtils

I do not have «Multi-file Compilation» checked.

All of the source files in question have been added to the project. I have created groups to mimic the directory structure of the library.

The problem goes away if I change the paths from absolute paths to relative paths such as

#include "somelocalheader.h"
#include "../Utils/someotherheader.h"

But I am dealing with a large number of files and want to modify them as little as possible.

I have never had an issue with this before — does anyone have any idea why this would happen. Is there a simple fix for this so I do not have to scrub every include statement in every c file?

This is essentially what my directory tree looks like:

  • Source
    • Debug
      • Exe
        • Output.d43
      • List
        • blabla.map
      • Obj
    • Release
    • settings
    • ThirdPartyLib
      • Subdir
        • … Third Party Code Files Live Here …
      • Utils
        • … More Third Party Code Files Live Here …
    • … My Code Lives Here, Along with the EWP, EWW, etc …

EDIT #2:
I moved the directory of ThirdPartyLib up a level, because I run doxygen recursively on /Source/ and I realized that it takes doxygen FOREVER, and plus the library has its own API.

Anyway, here is what the structure looks like now:

  • Working Copy
    • Source
      • Debug
        • Exe
          • Output.d43
        • List
          • blabla.map
        • Obj
      • Release
      • settings
      • … My Code Lives Here, Along with the EWP, EWW, etc …
    • ThirdPartyLib
      • Subdir
        • … Third Party Code Files Live Here …
      • Utils
        • … More Third Party Code Files Live Here …

I have added a group back to my project for ThirdPartyLib with two subgroups SubDir and Utils, and added all of the files from the Subdir and Utils directories to the corresponding subgroups.

Now I have tried to compile this again, and again i am faced with the Pe1696 errors. IAR says:

searched: "C:...Working CopyThirdPartyLibSubDir"

Yet it is still not finding the files.

I referred to this post:
http://e2e.ti.com/support/low_power_rf/f/155/t/110195.aspx
I am not sure it is completely relevant, because the directories I am including don’t seem to have ‘fallen out’. IAR is clearly searching for the files.

But I tried anyway to add the following lines to the preprocessor

$PROJ_DIR$..ThirdPartyLibSubDir
$PROJ_DIR$..ThirdPartyLibutils

This does not seem to help. I get these additional lines in the message log:

searched: "C:...Working CopySource..ThirdPartyLibSubDir"
searched: "C:...Working CopySource..ThirdPartyLibUtils"

Edit #3
I tried moving the EWW/EWP up a level to «Working Copy» and then readded all of the groups and all of the files… no dice. I am lost here. The part that is most frustrating is that the same library is implemented in another project that was done by some former developers and I am trying to include it the same way. I know this is going to be something trivial, I just don’t know what.

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and
privacy statement. We’ll occasionally send you account related emails.

Already on GitHub?
Sign in
to your account


Closed

SeppoTakalo opened this issue

Nov 29, 2016

· 6 comments

Assignees

@0xc0170

Comments

@SeppoTakalo

Description

  • Type: Bug

Bug

Target
K64F

Toolchain:
IAR

Steps to reproduce

mbed import <URL of mbed-os-example-mesh-minimal>
mbed export -m K64F -i make_iar
make

Output:

$ make
C:/Git/mbed-os-example-mesh-minimal/makefile:693: varoitus: syrj▒ytet▒▒n kohteen ".s.o" komennot
C:/Git/mbed-os-example-mesh-minimal/makefile:688: varoitus: ei huomioida vanhoja komentoja kohteelle ".s.o"
Compile: NanostackRfPhyAtmel.cpp

   IAR ANSI C/C++ Compiler V7.70.2.11706/W32 for ARM
   Copyright 1999-2016 IAR Systems AB.
   Network license: 10.118.12.44 (STD)

    #include _DLIB_CONFIG_FILE_HEADER_NAME
                                          ^
"C:Program Files (x86)IAR SystemsEmbedded Workbench 7.5arminccDLib_Defaults.h",39  Fatal error[Pe1696]: cannot open source file "C:/Program Files (x86)/IAR Systems/Embedded Workbench 7.3/arminccDLib_Config_Full.h"
Fatal error detected, aborting.

Errors: 1
Warnings: none
make[1]: *** [atmel-rf-driver/source/NanostackRfPhyAtmel.o] Virhe 2
make: *** [all] Virhe 2

(Sorry about Finnish localisation, ignore those messages)

@SeppoTakalo



Copy link


Contributor

Author

Is this a problem in my toolchain setup or a valid exporter problem? Can somebody verify?

@theotherjimmy

I cannot reproduce the problem

Versions of things

  • iccarm IAR ANSI C/C++ Compiler V7.60.2.11341/W32 for ARM
  • mbed-os-example-mesh-minimal On branch mbed-os-5.3-rc Your branch is up-to-date with 'origin/mbed-os-5.3-rc'.
  • mbed-cli 0.9.7

@SeppoTakalo



Copy link


Contributor

Author

$ iccarm --version
IAR ANSI C/C++ Compiler V7.70.2.11706/W32 for ARM
$ mbed-cli --version
1.0.0
$ cd mbed-os;git describe
mbed-os-5.3.0-rc1

Target board used is K64F.

@bulislaw

Maybe it’s connected to #3338 ?

@SeppoTakalo



Copy link


Contributor

Author

Actually, I think I found the issue.
mbed-cli seems to hardcode the paths to C:Program Files (x86)IAR SystemsEmbedded Workbench 7.3 but I have 7.5

I need to configure mbed-cli properly.

@SeppoTakalo



Copy link


Contributor

Author

After setting IAR_PATH variable correctly this seems to work. So problem was on my test setup.
(Weird, because I haven’t set anything. All others work, except IAR makefile build).

C:Gitmbed-os-example-mesh-minimal>mbed config --list
[mbed] Global config:
ARM_PATH=C:/Keil_v5/ARM
IAR_PATH=C:/Program Files (x86)/IAR Systems/Embedded Workbench 7.5/arm

Прекомпилированные библиотеки, которые созданы из модулей кода, полезно использовать в больших проектах для ускорения процесса компиляции. В библиотеки целесообразно поместить код, который не меняется в настоящий момент (когда идет работа над чем-то другим). В составе IAR есть обстоятельная документация «IAR Runtime Environment and Library User Guide» [1], однако это руководство довольно большое и сложное для изучения. Здесь представлены простые инструкции — как в проекте использовать заранее скомпилированный код в виде библиотек (prebuild library), чтобы помногу раз не перекомпилировать одни и те же файлы и экономить время разработки.

[Как создать библиотеку в IAR]

1. Создайте проект, куда добавьте модули исходного кода, которые должны быть помещены в библиотеку (меню Project -> Create New Project… -> C -> main -> OK -> укажите имя файла проекта и выберите папку, куда он будет сохранен). Удалите из проекта модуль main.c, который был создан автоматически, и добавьте в проект все модули кода, которые должны быть помещены библиотеку. Настройки нового проекта для библиотеки будут во многом копировать настройки других Ваших проектов — нужно выбрать тип процессора, уровень оптимизации, прописать пути поиска заголовков и проч.

Как вариант, можно создать пустой проект, и потом его настроить на создание библиотеки.

Процесс по шагам, На примере кода STM32_USB_Host_Library из STM32Cube_FW_F4_V1.24.0:

1. Создайте пустой проект через меню Project -> Create New Project… -> Empty Project -> OK.

IAR create lib01

IAR запросит ввести имя файла для проекта (файл с расширением *.ewp). Укажите короткое, но понятное имя, отрающее назначение будущей библиотеки. Например, для библиотеки хоста USB STM32 (STM32_USB_Host_Library) я указал имя USBhost, и сохранил этот файл в корневом каталоге библиотеки.

IAR create lib02

2. Откройте опции проекта.

IAR create lib03

В разделе General Options -> Output выберите радиокнопку Library. Как вариант, можно указать папку, куда будет сохранен выходной файл компилируемой библиотеки. Я обычно указываю этот путь относительно каталога проекта $PROJ_DIR$, см. скриншот:

IAR create lib04

3. Выберите тип процессора, для которого компилируете библиотеку, для чего перейдите в раздел General Options -> Target. Переключите радиокнопку «Processor variant» на Device, и с помощью кнопки выберите тип микроконтроллера (ST -> STM32F4 -> STM32F429 ->STM32F429ZI).

IAR create lib05

Закройте окно опций проекта кнопкой OK.

4. Добавите в проект все необходимые файлы библиотеки.

IAR create lib06

5. Теперь нужно настроить пути поиска заголовочных файлов для препроцессора. Для этого попробуйте скомпилировать проект. Конечно, компилятор может не найти некоторые необходимые заголовочные файлы, и в консоли сборки Build покажет соответствующие сообщения, например:

Changed settings forces a full rebuild...
Building configuration: USBhost - Debug
Updating build tree...
0  file(s) deleted.
Updating build tree...
usbh_ioreq.c Fatal Error[Pe1696]: cannot open source file "usbh_ioreq.h" D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryCoreSrcusbh_ioreq.c 22 searched: "D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryCoreSrc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1arminc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1armincc" current directory: "C:UsersAndreyDesktop" Error while running C/C++ Compiler usbh_core.c Fatal Error[Pe1696]: cannot open source file "usbh_core.h" D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryCoreSrcusbh_core.c 23 searched: "D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryCoreSrc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1arminc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1armincc" current directory: "C:UsersAndreyDesktop" Error while running C/C++ Compiler usbh_msc_scsi.c Fatal Error[Pe1696]: cannot open source file "usbh_msc.h" D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryClassMSCSrcusbh_msc_scsi.c 28 searched: "D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryClassMSCSrc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1arminc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1armincc" current directory: "C:UsersAndreyDesktop" Error while running C/C++ Compiler usbh_msc_bot.c Fatal Error[Pe1696]: cannot open source file "usbh_msc_bot.h" D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryClassMSCSrcusbh_msc_bot.c 28 searched: "D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryClassMSCSrc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1arminc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1armincc" current directory: "C:UsersAndreyDesktop" Error while running C/C++ Compiler usbh_ctlreq.c Fatal Error[Pe1696]: cannot open source file "usbh_ctlreq.h" D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryCoreSrcusbh_ctlreq.c 22 searched: "D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryCoreSrc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1arminc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1armincc" current directory: "C:UsersAndreyDesktop" Error while running C/C++ Compiler usbh_msc.c Fatal Error[Pe1696]: cannot open source file "usbh_msc.h" D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryClassMSCSrcusbh_msc.c 41 searched: "D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryClassMSCSrc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1arminc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1armincc" current directory: "C:UsersAndreyDesktop" Error while running C/C++ Compiler usbh_pipes.c Fatal Error[Pe1696]: cannot open source file "usbh_pipes.h" D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryCoreSrcusbh_pipes.c 21 searched: "D:asmradiopagerMiddlewaresSTSTM32_USB_Host_LibraryCoreSrc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1arminc" searched: "C:Program Files (x86)IAR SystemsEmbedded Workbench 8.1armincc" current directory: "C:UsersAndreyDesktop" Error while running C/C++ Compiler
Total number of errors: 7 Total number of warnings: 0

Снова откройте опции проекта, и в разделе C/C++ Compiler -> Preprocessor, в область ввода «Additional include directories: (one per line)» добавьте строки путей поиска заголовочных файлов, например:

$PROJ_DIR$......MiddlewaresSTSTM32_USB_Host_LibraryCoreInc
$PROJ_DIR$......MiddlewaresSTSTM32_USB_Host_LibraryClassMSCInc
$PROJ_DIR$......Inc
$PROJ_DIR$......DriversCMSISDeviceSTSTM32F4xxInclude
$PROJ_DIR$......DriversCMSISInclude
$PROJ_DIR$......DriversSTM32F4xx_HAL_DriverInc
$PROJ_DIR$......DriversBSP
$PROJ_DIR$......MiddlewaresThird_PartyFreeRTOSSourceCMSIS_RTOS
$PROJ_DIR$......MiddlewaresThird_PartyFreeRTOSSourceinclude
$PROJ_DIR$......MiddlewaresThird_PartyFreeRTOSSourceportableIARARM_CM4F

Каждое добавление пути проверяйте компиляцией (F7), и продолжайте добавлять пути поиска, пока компилятор не перестанет выдавать сообщения об ошибке поиска заголовочных файлов.

6. На определенном этапе компиляции могут возникнуть другие ошибки, связанные с отсутствием в проекте некоторых символов, например определений типа процессора. Например:

usbh_msc_scsi.c
Fatal Error[Pe035]: #error directive: "Please select first the target STM32F4xx device
used in your application (in stm32f4xx.h file)"
D:asmradiopagerDriversCMSISDeviceSTSTM32F4xxIncludestm32f4xx.h 191
Error while running C/C++ Compiler

Снова откройте опции проекта, и снова перейдите в раздел C/C++ Compiler -> Preprocessor. В область ввода «Define symbols: (one per line)» добавьте недостающие символы.

IAR create lib07

Снова скомпилируйте проект. В случае появления ошибок поиска заголовочных файлов повторите шаг 5.

7. В результате проект скомпилируется без ошибок, например:

Building configuration: USBhost - Debug
Updating build tree...
8 file(s) deleted. Updating build tree... usbh_msc_scsi.c usbh_ctlreq.c usbh_msc_bot.c usbh_core.c usbh_msc.c usbh_ioreq.c usbh_pipes.c Building library
Total number of errors: 0

В выходном каталоге появится библиотечный файл имяпроекта.a (в нашем примере USBhost.a). Теперь этот двоичный файл библиотеки можно использовать в другом проекте вместо файлов исходного кода — удалите из проекта модули исходного кода, и добавьте в проект файл скомпилированной библиотеки.

[Дополнительные настройки]

8. Можно настроить для библиотеки дополнительный уровень оптимизации кода, для чего перейдите в раздел опций C/C++ Compiler -> Optimizations. Радиокнопка Level вместе с выпадающим списком Balanced/Size/Speed/ и галочками тонкой настройки позволяют указать необходимую опимизацию, выполняемую компилятором.

IAR create lib08

Как обычно, когда разрабоатываемое приложение еще отлаживается, полезно выбрать уровень оптимизации None, тогда будут полностью доступны все символы библиотеки и отладка по её исходному коду. Если же разработка близка к завершению, обычно выбирают уровень оптимизации High -> Speed (оптимизация по скорости) или High -> Size (оптимизация по размеру).

Примечание: качественно написанный код должен одинаково хорошо работать как с включенной, так и с выключенной оптиммизацией. Переключение уровня оптимизации в общем случае хорошее средство выявления багов и узких мест в коде. Обычная ситуация — проект с отключенной оптимизацией работает, а со включенной оптимизацией не работает. Тогда разделение проекта на отдельно компилируемые библиотеки дает способ определить, какая часть кода критична к оптимизации, а какая нет.

9. Можно настроить две конфигурации проекта библиотеки — одну для отладки (Debug), другую для релиза (Release). По умолчанию при создании пустого проекта автоматически создаются эти две конфигурации Debug и Release (диалог конфигураций открывается через Project -> Edit Configurations…):

IAR create lib09

Одна из конфигураций Debug у нас уже настроена. Теперь для настройки конфигураци и Release нужно её выбрать, и настроить в ней все необходимые опции, повторив шаги 2, 3, 5, 6. Это довольно утомительный процесс, даже с учетом того, что можно копировать опции через буфер обмена.

Но есть способ поступить проще — удалить конфигурацию Release и создать её заново на основе конфигурации Debug, при этом все опции скопируются автоматически. Останется выбрать только уровень оптимизации. Для этого откройте диалог Project -> Edit Configurations…, удалите конфигурацию Release (кнопкой Remove, при этом текущей должна быть конфигурация Debug). После этого нажмите кнопку New… введите имя конфигурации (например Release) и создайте её на основе конфигурации Debug, нажав кнопку OK:

IAR create lib10

В созданной конфигурации придется заново повторить ввод выходной директории (раздел General Options -> Output, поле ввода Executables/libraries), и настроить оптимизацию (C/C++ Compiler -> Optimizations) и отключить вывод отладочной информации (C/C++ Compiler -> Output, снять галочку «Generate debug information»).

2. Откройте свойства проекта, перейдите в раздел General Options, выберите закладку Output. Переставьте радиокнопку Output file в положение Library.

3. Скомпилируйте проект. По умолчанию выходной файл библиотеки создастся в папке DebugExe, и файл получит имя проекта и расширение *.a. Это и есть прекомпилированный файл библиотеки. Теперь его нужно добавить в тот проект.

[Как добавить библиотеку в проект вместо модулей исходного кода]

1. Удалите из проекта все файлы модулей, которые были перенесены библиотеку. Проще всего, когда эти модули в проекте содержатся в отдельной папке. Тогда достаточно просто отключить от процесса компиляции в проекте папку с этими модулями, не удаляя их из проекта (впоследствии всегда можно их подключить обратно). Щелкните в дереве проекта правой кнопкой на папке, которую хотите отключить от компиляции, выберите Options… и поставьте галочку Exclude from build. Теперь эти модули компилироваться не будут. Код из этих модулей будет браться из библиотеки.

2. В проекте, куда хотите добавить библиотеку, зайдите в свойства проекта через меню Project -> Options, перейдите в раздел Linker -> закладка Library, и в поле Additional libraries добавьте полный путь до файла библиотеки. Не стесняйтесь использовать макросы IAR типа $PROJ_DIR$, чтобы удалить привязку к абсолютным путям. Например, путь до файла библиотеки может быть наподобие следующего:

$PROJ_DIR$....precompiled-IAR-libsefsl-libDebugExeefsllibprj.a

3. Перекомпилируйте проект с добавленной библиотекой. Он должен скомпилироваться без ошибок.

[Ссылки]

1. IAR Runtime Environment and Library User Guide site:supp.iar.com.

Понравилась статья? Поделить с друзьями:
  • Idea createprocess error 206 имя файла или его расширение имеет слишком большую длину
  • I915 drm error
  • I5h ошибка посудомойка электролюкс
  • Ide master slave error
  • Id error 0001 phison