Поиск
Показаны результаты для тегов 'iar'.
-
Не удается перепрыгивать к местам определения функций или переменных. Проект компилируется и запускается. Project->Clean Brouse Information делал.
-
Ошибка: Warning: run_S00-22: illegal opcode P0:65535, P1:0
kitkat1000 опубликовал тема в IAR
Здравствуйте, подскажите пожалуйста, если кто знает. Как устранить ошибку Warning: run_S00-22: illegal opcode P0:65535, P1:0 в среде IAR Embedded Workbench IDE - AVR (версия 7.30.5)? Ошибка появится при запуске режима отладки (Download and Debug или Debug without Downloading).-
- avr
- iar embedded
-
(и ещё 6 )
C тегом:
-
Ссылка на официальный сайт померла: IAR Eclipse plugin update site Кто-нибудь имеет и/или умеет их устанавливать из "локального" файла/сайта? Желательно для IAR ARM 8.50. wp0002_iar_eclipse_setup_guide.pdf
-
Добрый день, коллеги! Получилось ли у кого-нибудь унести к себе в проект все файлы распакованной либы, которая инициализирует глобальные переменыые, и, что очень важно для меня, конструкторы глобальных объектов? Я перетащил к себе нобходимые исходники *.s/*c, но при компиляции получаю ошибки на неизвестные типы. Проект с собой не захватил, поэтому не могу привести тексты ошибок. Но вдруг там есть какой-ниубудь нюанс, который я не учёл? Я хочу чтобы ВЕСЬ код проекта выполнялся под моим присмотром. Особенно это касается инициализации конструкторов.
-
Приветствую всех кому интересна тема. Обнаружена ошибка в отображении PORTG при дебаггинге микроконтроллера 1986ВЕ3Т среде IAR. Если точнее, то базовый адрес порта G для указанной микросхемы указывает на область KEYBOARD. И поэтому при отладке вы не увидите реальных значений параметров порта G. Настоящий адрес PORTG = 0x4011_8000, а в файле конфига дебаггера в разделе GPIOG стоит 0x4011_0000, а это как раз адрес клавиатуры. В приложении выкладываю файл jbr_MDR1986VE3.ddf с исправленным адресом, если кому лень исправлять вручную самому. Этот файл надо поместить в папку установки IAR. если IAR установлен в папку по умолчанию, то это путь C:\Program Files (x86)\IAR Systems\Embedded Workbench 6.5\arm\config\debugger\Milandr. Сначала переименуйте оригинальный файл jbr_MDR1986VE3.ddf в jbr_MDR1986VE3.ddf.bak, а затем скопируйте туда файл из приложения. На правах "AS IS", ответственность на использующем. Привет jbr_MDR1986VE3.ddf
-
Приветствую! Возникла необходимость перенести проект из Atmel Studio в IAR и столкнулся с неожиданной проблемой - в IAR не получается настроить Linker, что бы после компиляции создавались два файла - .hex и .elf. С .hex-файлом проблем нет - настроил линкер по инструкции, найденной на просторах сети, и всё заработало. А вот с .elf-файлом ничего не получилось - В настройках линкера, на вкладке "Extra Output", включил параметр "Generate extra output file" и выбрал Output format: elf/dwarf. В результате при сборке проекта возникает следующая ошибка: Fatal Error[e92]: Cannot use the 'elf' output format with this cpu Error while running Linker Никто не подскажет, есть ли решение у данной проблемы? Не верится, что для данного устройства невозможно создать elf-файл - в Atmel Studio он создаётся без проблем. Да, совсем забыл - целевое устройство Atmega8535, версия IAR - 5.50.
-
Имеется МК на Cortex-M4, подключенный к IAR через ST-Link. Хочется запустить в его ОЗУ своё приложение не трогая прошивку во флешь. Создал проект, слинковал его в ОЗУ данного МК. Если теперь загрузить этот проект на исполнение в МК, то он нормально грузится, но начальное содержимое PC и SP берётся из той области, которая указана как загрузочная в данный момент при помощи BOOT-пина. Таковых областей может быть две: 1)флешь программ, 2)системная ROM. Т.е. - PC:SP берутся из начала этих областей. Мне же нужно, чтобы после загрузки программы через ST-Link в МК, начальное содержимое PC:SP бралось из таблицы векторов из начала ОЗУ. В МК есть возможность старта из ОЗУ, но для этого нужно установить в требуемое положение бит BOOT1 (это не пин, а бит во флешь). Сейчас этот бит стоит в таком положении, что выбирается старт из system-ROM. Как, не меняя этого бита во флешь, и не меняя флешь вообще, выставить PC:SP как надо? Я создал .mac-файл и делаю ремап ОЗУ на адрес 0 и заношу в VTOR начало моей таблицы векторов в начале ОЗУ. Так: Память нормально ремапится, таблица векторов - тоже. Но на PC:SP это не влияет. И если сейчас нажать F5, то исполняться пойдёт код из Flash или system-ROM (в зависимости от BOOT0-пина). Как изменить регистры CPU макросами? - я что-то не нашёл в доках. Можно конечно руками менять, но это неудобно при каждой загрузке делать это. Пробовал делать в execUserReset() после __RemapSRAM1(): __writeMemory32(0x05FA0001, 0xE000ED0C, "Memory"); //activate reset irq (NVIC.AIRCR=0x5FA0001); Но тогда выполнение кода стартует сразу же после загрузки (стартует правильно - мой загруженный в ОЗУ код). Но как сделать, чтобы регистры поменялись, но выполнение не стартовало???
-
Исключения из HEX файла, секции настроек.
pokk опубликовал тема в Программирование
Исключение секции сделал так: Настройки присутствуют в файле const S_flash_GlobalSettingAllVar Flash_default_Settings@".FlashDefault"=.... Настройки отсутствуют в файле __no_init S_flash_GlobalSettingAllVar Flash_default_Settings@".FlashDefault"; Дальше хотел сделать разные конфигурации проекта, и запускать тот или другой вариант, но это оказывается не очень удобно, так как при измени одной конфигурации приходиться изменять и другую. Как это можно сделть по другому ? Вообще мне надо 2 hex файла один который содержит настройки, и второй без секции настроек. (хотел последовательно запускать iarbuild.exe с разной конфигурацией,но до этого пока не дошел) -
Доброго дня, Коллеги, подскажите, пожалуйста, можно ли настроить IAR так, чтобы при запуске Make из IDE обрабатывались только объектные или изменённые файлы? Задача выглядит так: Есть несколько исходных файлов, которые нужно скрыть от заказчика (договором это предусмотрено). Соответственно, видится вариантом передача ему проекта с частью "нескрытых" исходников и со всеми объектными файлами. В той части, которая не скрыта от заказчика, последний может менять всё что захочет. Та же часть, которая должна быть скрыта, не имеет зависимостей от первой, и при сборке будет подключаться лишь как объектные файлы. Сейчас если я удаляю такой файл, подлежащий "скрытию", то компилятор выдаёт ошибки несмотря на то, что объектники все есть. Спасибо!
-
непонятное поведение IAR при генерации кода для STM32
Zeal0t опубликовал тема в ARM, 32bit
Добрый день. Имеем STM32L1 семейства. Столкнулся со странностью оптимизатора IAR, или что то недопонимаю сам. Имеем следующие структуры typedef __packed struct { uint32_t ID; uint16_t VERS; uint32_t UID; uint32_t DeviceType; uint32_t DeviceNumber; uint32_t CreateTime; uint32_t ExpireTime; } tagExpireKey; typedef __packed struct { uint8_t G[10]; } tagExpireKeyCrypt; typedef __packed struct { tagExpireKey Data; tagExpireKeyCrypt Crypt; uint32_t ControlCRC; } tagExpireKeyDevice; глобальную переменную этого типа tagExpireKeyDevice License; Переменная License загружается выше по тексту программы. Данные в полях всех структур корректные. Далее в тексте программы выполняются 2 проверки: uint32_t CurTime; CurTime = FRTC.GetSeconds(); for (;;) { ... if (CurTime < LicenseCUR.Data.CreateTime) break; if (CurTime > LicenseCUR.Data.ExpireTime) break; ... } что в asm выглядит следующим образом \ ??DataTable1_2: \ 00000000 0x........ DC32 LicenseCUR \ ??DataTable1_4: \ 00000000 0x........ DC32 FRTC ... \ 00000004 0x.... LDR.N R5,??DataTable1_2 ... 83 CurTime = FRTC.GetSeconds(); \ 00000020 0x.... LDR.N R6,??DataTable1_4 \ 00000028 0x4630 MOV R0,R6 \ 0000002A 0x.... 0x.... BL _ZN4TRTC10GetSecondsEv ... 95 if (CurTime < LicenseCUR.Data.CreateTime) break; \ 0000002E 0xF8D5 0x1012 LDR R1,[R5, #+18] \ 00000032 0x4288 CMP R0,R1 \ 00000034 0xBF24 ITT CS \ 00000036 0xF8D5 0x1016 LDRCS R1,[R5, #+22] \ 0000003A 0x4281 CMPCS R1,R0 99 if (CurTime > LicenseCUR.Data.ExpireTime) break; \ 0000003C 0xD303 BCC.N ??CheckCurLicense_0 проходя в отладчике этот кусок кода, увидел что при первом сравнении в R1 при выполнении LDR R1,[R5, #+18] была выполнена загрузка значения поля LicenseCUR.Data.CreateTime и условие программы было выполнено, а вот при выполнении LDRCS R1,[R5, #+22] значение поля LicenseCUR.Data.ExpireTime в R1 не загружается. если изменить текст программы как asm("nop"); if (CurTime < LicenseCUR.Data.CreateTime) break; asm("nop"); if (CurTime > LicenseCUR.Data.ExpireTime) break; получаем следующий корректно работающий листинг: 94 asm("nop"); \ 0000002E 0xBF00 nop 95 if (CurTime < LicenseCUR.Data.CreateTime) break; \ 00000030 0xF8D5 0x1012 LDR R1,[R5, #+18] \ 00000034 0x4288 CMP R0,R1 \ 00000036 0xD308 BCC.N ??CheckCurLicense_0 96 97 asm("nop"); \ 00000038 0xBF00 nop 98 // время лицензии закончилось 99 if (CurTime > LicenseCUR.Data.ExpireTime) break; \ 0000003A 0xF8D5 0x1016 LDR R1,[R5, #+22] \ 0000003E 0x4281 CMP R1,R0 \ 00000040 0xD303 BCC.N ??CheckCurLicense_0 т.е. вставлен nop, который сбрасывает очередь, если не путаю ничего и компилятор сделал обе загрузки через LDR R1,[R5, #+18] LDR R1,[R5, #+22] в чем моя, или не моя, ошибка? то что инструкция <ITT CS> и далее <LDRCS> не верно работают с упакованными структурами или что то другое? спасибо. p.s. Если модераторы посчитают необходимым - можно перенести тему в ARM форум. Не стал дублировать сообщения.- 11 ответов
-
- оптимизация
- stm32
-
(и ещё 1 )
C тегом:
-
Решил по пробовать с++ на stm32, но наткнулся на то что он ругается на constexpr Error[Pe020]: identifier "constexpr" is undefined IAR вообше подеживает ? Какой версии ? Я пробовал на 7.50