Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программа для IAR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
*SERG
Прикрепите в данной теме пожалуста какуюнибудь простенькую программу для того чтоб начать работать с ИАР с коментариями если можно. Немного поразбирался с иаровским примером, не вижу где припасанны установки всех регистров контроллера blink.gif Почемуто программа состоит из нескольких проектов, это принципиально чтоли? И зачем программу делать из проектов?
Хотелось бы посмотреть простенькую программу в которой есть пару прерываний, не важно от чего, посмотреть саму структуру и правила написания. Писал в квавр с год наверно, вот щас решил на иар перейти. Если кому не жалко иль не сложно, накатайте небольшой примерчик с установкой регистров, функцией или процедурой и обработкой прерываний smile.gif
*SERG
Это я видел, там же куски программы, ещё и в jpeg, а мне для того чтоб хорошеничко разобраться, лучше б проект какойнибудь, полнофункциональный, желательно с тем о чём написал выше.
GL_basik
В совое время разработал офисные часы. Потом понадобилось добавить туда несколько функций и часы пришлось переделывать, так как в контроллере не осталось места. Вообщем вот программа от старого варианта. Для меня ценности не представляет. Можете пользоваться.
GDI
Регистры контроллера описаны в файлах ioavr.h , inavr.h, вернее при выборе в опциях проекта целевого контроллера из этих файлов вызываются соответствующие каждому контроллеру заголовочные файлы, такие как iom8.h, для мега8, и так для каждого. Соответственно файлы ioavr.h и inavr.h должны быть включены в проект.
Fortune
Цитата(*SERG @ Feb 16 2007, 10:56) *
...Почемуто программа состоит из нескольких проектов, это принципиально чтоли? И зачем программу делать из проектов?


А что значит "программа состоит из нескольких проектов"? всмысле она состоит из более чем одного файла *.eww или я чего-то не понимаю? Насколько я понял, создается Workspace, в его состав включаются файлы *.h , *.c и т.п. После линковки получается обьектный файл. Или что имеется ввиду?

Цитата(*SERG @ Feb 16 2007, 10:56) *
...Хотелось бы посмотреть простенькую программу в которой есть пару прерываний, не важно от чего, посмотреть саму структуру и правила написания...


Сорри за флуд, забыл дописать.

Для того чтобы вызвать прерывание, достаточно разрешить прерывания (написать SREG=0x80 в начале программы)
а в конце расставить вектора:

#pragma vector = 0x80

__interrupt void transmitter(void)
{
...
}
#pragma vector = 0x78

__interrupt void receiver(void)
{
...
}
kd_Rash
Цитата(kd_Rash @ Feb 16 2007, 10:18) *


какой jpeg??!!!
смотри лучше!!!
хорош обижать, ааа!!!
полнее проекта и не придумаешь
ну что за люди такие не благодарные!!!
Fortune
Ну и например для USART в начале программы инициализировать USART:
UCSR1B = 0xd8;
UCSR1C = 0x06;
UBRR1H = 0;
UBRR1L = 25; // ×àñòîòà 19200 áîä
UCSR1A = 0;
UDR1 = 0xff;
*SERG
Когда пример открываешь там несколько вкладок проектов, что это тогда такое?

Цитата(kd_Rash @ Feb 16 2007, 11:57) *
Цитата(kd_Rash @ Feb 16 2007, 10:18) *


какой jpeg??!!!
смотри лучше!!!
хорош обижать, ааа!!!
полнее проекта и не придумаешь
ну что за люди такие не благодарные!!!


Ой ссори, нашёл, спасибо конечно же огромное.


всем спасибо!!! a14.gif

Поразбираюсь пока, потом если что по ходу дела вопросы позадаю)

Цитата(GDI @ Feb 16 2007, 11:43) *
Регистры контроллера описаны в файлах ioavr.h , inavr.h, вернее при выборе в опциях проекта целевого контроллера из этих файлов вызываются соответствующие каждому контроллеру заголовочные файлы, такие как iom8.h, для мега8, и так для каждого. Соответственно файлы ioavr.h и inavr.h должны быть включены в проект.


Понял. спасибо! smile.gif

Цитата(Fortune @ Feb 16 2007, 11:55) *
Цитата(*SERG @ Feb 16 2007, 10:56) *

...Почемуто программа состоит из нескольких проектов, это принципиально чтоли? И зачем программу делать из проектов?


А что значит "программа состоит из нескольких проектов"? всмысле она состоит из более чем одного файла *.eww или я чего-то не понимаю? Насколько я понял, создается Workspace, в его состав включаются файлы *.h , *.c и т.п. После линковки получается обьектный файл. Или что имеется ввиду?

Цитата(*SERG @ Feb 16 2007, 10:56) *
...Хотелось бы посмотреть простенькую программу в которой есть пару прерываний, не важно от чего, посмотреть саму структуру и правила написания...


Сорри за флуд, забыл дописать.

Для того чтобы вызвать прерывание, достаточно разрешить прерывания (написать SREG=0x80 в начале программы)
а в конце расставить вектора:

#pragma vector = 0x80

__interrupt void transmitter(void)
{
...
}
#pragma vector = 0x78

__interrupt void receiver(void)
{
...
}


Ага, понятно! smile.gif

#include <inavr.h>
#include <stdio.h>
#include <stdlib.h>
#include <iotiny26.h>
#include "math.h"
#include <string.h>
#include "define.h"

смотрю часы офисные, зачем вот это #include "math.h" и #include "define.h"
так понимаю что это чтото маленькой библиотеки) созданные самим разработчиком. Но зачем? И каким образом их делать? Почему они в ковычках?
SasaVitebsk
Вот ещё пару ссылок на полные проекты мои и чужие

http://electronix.ru/forum/index.php?showt...4&hl=ds1820

http://electronix.ru/forum/index.php?showt...getting+started


По поводу подключаемых библиотек почитай в каталоге doc документ clib. Это тебе понадобится. Ты же должен знать какие стандартные ф-ии поддерживает твой компилятор. Кстати библиотеки, в общем то стандартные и их можно почитать и в книге хорошей. Например Г.Шилдт "Полный справочник по Си". Там описано, какая ф-ия в какой библиотеке находится. Например math.h - математика. acos, asin,atan,....
*SERG
Цитата(SasaVitebsk @ Feb 16 2007, 12:33) *
Вот ещё пару ссылок на полные проекты мои и чужие

http://electronix.ru/forum/index.php?showt...4&hl=ds1820

http://electronix.ru/forum/index.php?showt...getting+started


По поводу подключаемых библиотек почитай в каталоге doc документ clib. Это тебе понадобится. Ты же должен знать какие стандартные ф-ии поддерживает твой компилятор. Кстати библиотеки, в общем то стандартные и их можно почитать и в книге хорошей. Например Г.Шилдт "Полный справочник по Си". Там описано, какая ф-ия в какой библиотеке находится. Например math.h - математика. acos, asin,atan,....


на счёт стандартных библиотек в курсе smile.gif Спасибо!
IgorKossak
Цитата(*SERG @ Feb 16 2007, 08:56) *
Почемуто программа состоит из нескольких проектов, это принципиально чтоли? И зачем программу делать из проектов?

Это просто удобно.
Простейший пример - бутлоадер и приложение делается двумя проектами, но в одном воркспейсе.
В этом случае проекты используются на одной платформе и могут совместно использовать некоторые файлы (bsp, hal и т. д.).
*SERG
Подскажите как объявить битовую переменную и назначать переменные в битовом формате в квавр
bit
0b00110101
А в ИАР не понял как это сделать sad.gif
GL_basik
Цитата(*SERG @ Feb 16 2007, 12:18) *
смотрю часы офисные, зачем вот это #include "math.h" и #include "define.h"
так понимаю что это чтото маленькой библиотеки) созданные самим разработчиком. Но зачем? И каким образом их делать? Почему они в ковычках?

Значит math.h досталось в наследство от старого проекта. Здесь его нет. define.h есть, как он выглядит можешь посмотреть. Делать его так же как и файл в котром программа. smile.gif
Файлы загаловков указываются в теругольных скобках если находятся в библиотеке IARa. Если они лежат в папке проекта то берутся в кавычки.
SpiritDance
Цитата(*SERG @ Feb 16 2007, 14:11) *
Подскажите как объявить битовую переменную и назначать переменные в битовом формате в квавр
bit
0b00110101
А в ИАР не понял как это сделать sad.gif

В ИАРе как и в нормальном стандарном С - никак. Переделывайте руки и не занимайтесь извращениями.
*SERG
Цитата(GL_basik @ Feb 16 2007, 15:32) *
Цитата(*SERG @ Feb 16 2007, 12:18) *
смотрю часы офисные, зачем вот это #include "math.h" и #include "define.h"
так понимаю что это чтото маленькой библиотеки) созданные самим разработчиком. Но зачем? И каким образом их делать? Почему они в ковычках?

Значит math.h досталось в наследство от старого проекта. Здесь его нет. define.h есть, как он выглядит можешь посмотреть. Делать его так же как и файл в котром программа. smile.gif
Файлы загаловков указываются в теругольных скобках если находятся в библиотеке IARa. Если они лежат в папке проекта то берутся в кавычки.

Спасибо за пояснение smile.gif

Цитата(SpiritDance @ Feb 16 2007, 18:53) *
Цитата(*SERG @ Feb 16 2007, 14:11) *

Подскажите как объявить битовую переменную и назначать переменные в битовом формате в квавр
bit
0b00110101
А в ИАР не понял как это сделать sad.gif

В ИАРе как и в нормальном стандарном С - никак. Переделывайте руки и не занимайтесь извращениями.

Ну руки может и не от туда растут, но за то золотые wink.gif
Сергей Борщ
Цитата(*SERG @ Feb 16 2007, 13:11) *
Подскажите как объявить битовую переменную и назначать переменные в битовом формате в квавр
bit 0b00110101
А в ИАР не понял как это сделать sad.gif
как справедливо заметил SpiritDance - "в лоб" никак. Можно написать макрос, но это тупиковое решение. Посмотрите вот это сообщение: http://electronix.ru/forum/index.php?s=&am...st&p=203047 там и пример записи и объяснение почему лучше не использовать конструкции вроде UCSR1B = 0xd8; и #pragma vector = 0x78
*SERG
Цитата(Сергей Борщ @ Feb 16 2007, 21:49) *
Цитата(*SERG @ Feb 16 2007, 13:11) *

Подскажите как объявить битовую переменную и назначать переменные в битовом формате в квавр
bit 0b00110101
А в ИАР не понял как это сделать sad.gif
как справедливо заметил SpiritDance - "в лоб" никак. Можно написать макрос, но это тупиковое решение. Посмотрите вот это сообщение: http://electronix.ru/forum/index.php?s=&am...st&p=203047 там и пример записи и объяснение почему лучше не использовать конструкции вроде UCSR1B = 0xd8; и #pragma vector = 0x78


Посмотрел, спасибо!

А вот такое объявление битовых переменных "не красиво" чтоли?


struct
{
unsigned char skan_per:1;
unsigned char timer_int:1;
unsigned char timer_int2:1;
unsigned char vse_fazi:1;
unsigned char knopka:1;
unsigned char A5:1;
unsigned char A6:1;
unsigned char A7:1;
} flag;
Сергей Борщ
Цитата(*SERG @ Feb 19 2007, 05:33) *
А вот такое объявление битовых переменных "не красиво" чтоли?
Красиво до тех пор пока вам не захочется одной командой сбросить или установить более одного флага, либо по ходу работы переинициализировать эту структуру любым значением, отличным от нуля. Тогда это выльется в массу писанины. Придется либо заводить временные переменные такого же типа что и структура, либо работать с указателями и явно приводить типы. А начальная инициализация любым значением кроме нуля выглядит примерно так: flag = {0,1,1,1,0,1,1,0}; и тоже совершенно нечитаема. Приходится делать запись примерно такую:
Код
flag = {
0,    // skan_per
1,    // timer_int1
1,    // timer_int2
1,    // vse_fazi
0,    // knopka
1,    // A5
1,    // A6
0,    // A7
} flag;
что требует не меньше писаниниы чем flag= (0<<SKAN_PER)|(1<<TIMER_INT_1)|(TIMER_INT_2)|(1<<VSE_FAZI)|(0<<KNOPKA)|(1<<A_5)|(1<<A_6)|(0<<A_7).

При этом оба метода имеют право на жизнь. Запись битовым полем имеет тот плюс, что компилятор не позволит вам ошибочно установить флаг в совершенно другой переменной, а при ширине битового поля более 1 бита сам подставляет нужные сдвиги и маски.
bill_vs
Если надо работать со всем байтом (словом...), можно использовать union (как определены SFR)

__io union
{
unsigned char PORTE; /* The sfrb as 1 byte */
struct
{
unsigned char PORTE_Bit0:1,
PORTE_Bit1:1,
PORTE_Bit2:1,
PORTE_Bit3:1,
PORTE_Bit4:1,
PORTE_Bit5:1,
PORTE_Bit6:1,
PORTE_Bit7:1;
};
} @ 0x1F;
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.