IAR AVR. Пошаговый мануал по созданию первого проекта
04/11/2009 - 21:28
Pavel Bobkov
Запускаем IAR AVR. Откроется окно Embedded Workbench Startup, можно создать проект ипользуя его, но мы пойдем другим путем, поэтому жмем Cancel. Окно закроется и перед нами во всей своей невзрачной красе предстанет IAR.
Выбираем в верхнем меню Project > Create New Project…
IAR предложит выбрать тип шаблона проекта (Project templates). Выбираем C > main и кликаем Ок.
Верхняя строка – почти стандартный menu bar. Ниже - tool bar с кнопками.
С правой стороны находится редактор кода. Сейчас там открыт файл main.c, но в нем только пустая функция main().
С левой стороны расположено окно рабочего пространства (workspace), в котором отображается структура проекта. Любой IARовский проект должн находиться по-крайней мере в одном рабочем пространстве.
В верхней части рабочего пространства находится выпадающее меню. Это так называемые конфигурации проекта. По умолчанию их две – Debug и Release. Они отличаются между собой настройками проекта. Можно создавать свои конфигурации.
Сохраним рабочее пространство. Если не сделаем сейчас, придется делать это на этапе компиляции. Выбираем в меню File > Save Workspace
Выбираем тип микроконтроллера
General Options > Target > Processor configuration
У меня это ATmega8535.
В General Options > System ставим галочку Enable bit definitions in I/O-Include files
Включаем генерацию ассемблерного листинга. Необязательная опция, но я обычно включаю, чтобы посмотреть что натворил компилер.
С/С++ Compiler > List > галочка Output List File
Linker > Output.
B поле Output file cтавим галочку Override default и заменяем расширение d90 на hex
В поле Format выбираем Other и в выпадающем меню Output format выбираем тип файла intel-standart
Теперь копируем и вставляем текст нашей программы в main.c
#include <ioavr.h>
#include <intrinsics.h>
int main(void)
{
unsigned char led = 1;
DDRC = 255;
while(1)
{
PORTC = ~led;
__delay_cycles(400000);
led = led<<1;
if (led == 0)
led = 1;
}
return 0;
}
Кликаем кнопку Make.
Если все сделано правильно, IAR откомпилирует и соберет проект, а внизу откроется окно Messages.
Все прошло без ошибок. Но компилер выдал warning - statement is unreachable. Ничего страшного – он просто сообщает нам, что функция main никогда не возвратит значение. У нас в программе бесконечный цикл while(1){…} и микроконтроллер при работе никогда не дойдет до строчки return 0.
Если интересно посмотреть на ассемблерный листиг, открываем файл main.lst
Tagged under
Comments
Fatal Error[Cp001]: Copy protection check, No valid license found for this product [24]
Error while running C/C++ Compiler
НА КОТОРОМ ПЛАНИРУЕТСЯ установка программы и запишите Host-ID вашего компьютера.
2. наведите мышу на "IAR" и правой кнопкой выберите "изменить", в появившемся текстовом
файле измените Host-ID на тот который был в "IARID" и сохраните его в файле.
3. После запустите "IAR" и в "serial.txt" сгенерируются кода.
4. Откройте полученный файл любым текстовым редактором и найдите в нем подстроку EWAVR.
Данная сторока и пару строчек до нее будут выглядеть примерно так:
Installserial: XXXX-XXX-XXX-XX XX
Key:
L8L............ ....1OW# "EWAVR" version "2.25_WIN", no expiration date, exclusive
XXXX-XX - какие-то цифры
L8L...... - длиннючая строка из букв и цифр
5. Запустите инсталляцию IAR. Когда он попросит, скопируйте найденные значения:
Цифры из Installserial в поле License#
Всю строку Key в поле License Key.
6. После инсталляции вы получаете Full версию пакета.
Как исправили? Это первое, что из программировани я в своей жизни сделал. Пытаюсь начать программировать , но не знаю с чего начать.
Какую???
1. Переустановил виндоус сервис-пак 2 на серв.-пак 3.
2. Не стал создавать учётной записи , тем более с применением кириллицы.
3. Прочёл внимательно англоязычное руководство по установке; показалось, что русский перевод слишком упрощённый.
постоянно сидит чужой ID-код компьютера, отличный от моего.
5. Вывел в тхт - файл вышеуказанные параметры и шаг 3 решил игнорировать;ну по крайней мере, со своим айдишником
выработал коды. А запуск ВАТа, как показалось, снова портил код чужим ID, выводимым в консольное окно.
6. Попробовал с ними запустить программу - буд-то бы заработала как описано. Прежнего бреда (о неправильной лицензии)
больше пока не видел.
(оставлен тут для "мебели" чтоли). Его код решительно отвергается этой версией.
Замечу, что не пробовал идти по старым пробам, применив много новшеств (см.выше); и не могу знать, какая мера помогла
и насколько.В итоге всё равно требуются ещё тесты,т.к очень свеженькая версия пока, а по слухам, ломается IAR тяжело.
Спасибо за ссылку.
И ещё в категории proekt > options > C\C++compiler > plain 'char' is по умолчанию стоит галка Unsigned - значит в проекте можно просто писать 'char' компилятор будет принимать его как беззнаковую переменную.
Включаем опцию генерации map файла
Project > Options... > Linker > List - ставим галочку Generate linker listing
Затем запускаем компиляцию и сборку - F7
В рабочем пространстве (workspace) в папку Output появится map файл.
В конце этого файла и написано сколько байт занимает сгенерированный hex файл.
1. Tool -> Options
Messages: Show build messages -> All
2. Tool -> Options
Project: v Generate browse information
Размер смотреть в окне Build в Messages. Это окно включать, если оно было выключено, View -> Messages -> Build.
Tools>Options>Editors>Colors and Fonts - Editor Font
Мне нужно подсчитать CRC 8 по полиному Фирма выдаёт алгоритм как считать,но я в старой проге не могу это сделать. Как представить в ИАР массив[256] во флэш,а указатель на него в RAM.
#include <ioavr.h>
#include <intrinsics.h>
...
__flash unsigned char array[256];
unsigned char __flash* pointer = array;
Code:
<?xml version="1.0" encoding="iso-8859-1"?>
__C_task int main()
{
while(1){}
}
Включае. генерацию ассемблерного листинга. С/С++ Compiler > List > галочка Output List File - выдаёт ошибку
Error[Ms003]: could not open file "C:\Temp\Projec t_C(IAR_EW)\Deb ug\List\main.ls t" for writing
Internal Error: [CoreUtil/Gener al]: Unexpected windows exception (0xe06d7363) at 7C812AFB
Error while running C/C++ Compiler
Галочку уберу -компилирует и ошибок нет.
Подскажите.
v6.3.3
компиляция без ошибок а вот маке ошибка!!
Fatal Error[e72]: Segment CODE must be defined in a segment definition option (-Z, -b or -P)
как подправить?
код:
#include
#include
int main( void )
{
DDRB |= (1
в забыли указать что при выборе во кладке:
Linker\\Output галочку other intel-standart, то тогда дебагер не работает...
Пытаюсь перебраться из CodeVisionAVR.
Там работало, например:
Code:
PORTB = 0b01001101; //BIN
в IAR только так:
Code:
PORTB = 0x4D; //HEX
PORTB = 77; //DEC
Мне в BIN удобнее чем в HEX,DEC, более нагляднее, но такая запись не работает у меня. Не пойму почему. И в хелпе IAR не могу найти описания про Bit Variables или про Data Types, как, например, это есть в хелпе CVAVR.
Спасибо.
Code:
#define b00000001 1
#define b00000010 2
...
Компиляция примера прошла без ошибок, а hex не создается.
В чем может быть проблема?
Building configuration: new - Release
Updating build tree...
main.c
Warning[Pe111]: statement is unreachable C:\proect\ipad\ main.c 18
Linking
Error[e12]: Unable to open file 'new.hex'
Error while running Linker
Total number of errors: 1
Total number of warnings: 1
вот выкладка с авр студии
Code:
@0000007F: ?C_STARTUP
+0000007F: E90F LDI R16,0x9F Load immediate
+00000080: BF0D OUT 0x3D,R16 Out to I/O location
+00000081: E000 LDI R16,0x00 Load immediate
+00000082: BF0E OUT 0x3E,R16 Out to I/O location
и стек здесь он начинает с 0x9f а должен с 0x45f может это где то поправимо в Option подскажите
но к этому пришел методом расчета а как оно получается что 0x20 это запись в SPL 0x9f непонятно
Так просто не выйдет - нужно менять и скрипт линкера. Вы же всю память под стек возвратов отдали... Как IAR глобальные переменные будет выделять? места-то нет.
Например у нас CSTACK 0x20 и RCTASK 16 тогда в SP запишется
0x59(адрес 0x60 начало озу под переменные включительно)+0 x20+16*2=0x9f.П росто в начале я думал что IAR будет гнать адреса возврата от вершины 0x45f вниз, а данные загонять навстречу от 0x60, но оказалось что данные помещаются в озу после адреса стека возврата.
Можно и так настроить, только какой в этом смысл? Главное выбрать достаточные размеры стеков, а где они расположены не так уж и важно. Трудно сказать что хуже - чтобы стек наезжал на "чужую" облать ОЗУ или на пространство регистров ввода-вывода. И так и так глючить будет, разве что по-разному.
Нет, в IAR нет таких библиотек. Какие-то библиотеки для периферии можно найти у Atmel-а в ASF. Но многое и самому написать несложно.
RSS feed for comments to this post