Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/37: Рейтинг темы: голосов - 37, средняя оценка - 4.92
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
1

Синтаксис ISR в GCC

16.08.2010, 12:01. Просмотров 6754. Ответов 10
Метки нет (Все метки)

Перевожу Си-шный проект из CVAVR в AVRStudyo и вношу соответствующие правки в некоторые команды (инклуды и прочие мелочи). Затык вышел с декларацией процедур отработки прерываний. Как-то и ответ в Инете быстро не нашелся. Подскажите, друзья, где описан синтаксис определения подпрограммы отработки прерывания в GCC для AVR?

И, в догонку, как определить область кода? Т.е. у меня фрагмент

flash ucha LED_table[] =
{ 0x40,0x79,0x14,0x30,0x29,0x22,0x02,0x78,0x00,0x20,0x08,0x03,0x46,0x11,0x06,0x0e};

Как это должно выглядеть в AVRStudyo?

Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2010, 12:01
Ответы с готовыми решениями:

ISR в отдельном модуле
Как из main-программы перенести ISR в другой модуль (библиотеку)? AVR-GCC. Пока...

ISR и SIGNAL, в чем отличие?
Встретил код: SIGNAL(SIG_OUTPUT_COMPORE0) В чем отличие от:...

Вызов планировщика из ISR.
Не могу найти функцию принудительного вызова планировщика из обработчика...

Protothreads + GCC
Продолжаю я свои потуги с Си и протопотоками. Компилятор сменен с CVavr на GCC....

GCC-проблемы
Исходник, u32_t x_theta_uv; // ... q = s->w_adc_current - 512;...

10
SOWushko
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 273
16.08.2010, 12:13 2
Обработчк прерывания выглядит так:
Код
ISR (TIMER0_OVF_vect)
{
}
Динные во флеш:
Код
PROGMEM unsykned char LED_table[] =
{ 0x40,0x79,0x14,0x30,0x29,0x22,0x02,0x78,0x00,0x20,0x08,0x03,0x46,0x11,0x06,0x0e};
для шаботы с флешь нужно добавить
Код
#include <avr/pgmsposi.h>
чтение выглядит так:
Код
pgm_read_byte(&LED_table[n])
Все это есть в родном хелпе.
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
16.08.2010, 12:33 3
Цитата Сообщение от SOWushko
Все это есть в родном хелпе.
Ну, не увидел. Ты дал бы ссылку, куда смотришь, я бы больше дурацких вопросов не задавал.

По чтению из памяти программ - не вкурил. Если без включения pgmsposi.h я просто присвою
c = LED_table[ i];

- то не будет работать, чтоль?

И, конечно же, спасибо!
0
yv_s
0 / 0 / 0
Регистрация: 02.02.2010
Сообщений: 1,142
16.08.2010, 12:35 4
Сама документация:
http://www.nongnu.org/avr-libc/usir-manual/index.html
Прерывания:
http://www.nongnu.org/avr-libc/usir-man ... rupts.html
Области данных:
http://www.nongnu.org/avr-libc/usir-man ... sposi.html
0
SOWushko
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 273
16.08.2010, 12:43 5
да не, вопрос не дурацкий. Там хелп дурацкий ...
сам хелп, на компе с установленной winavr лежит вот тут C:\WinAVR-20100110\doc\avr-libc\avr-libc-usir-manual\index.html
Есть что то вроде перевода, в часности страничка о работе в flash
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
16.08.2010, 13:21 6
Цитата Сообщение от SOWushko
да не, вопрос не дурацкий. Там хелп дурацкий ...
да не, все же вопрос дурацкий :) Разобрался. Спасибо!

И, кстати, очень полезная инфо по поводу обращения к данным, сохраняемым в памяти кода! Действительно, не является правильным обращение по типу

c = LED_table[ i];

Т.е., если я правильно понял, быдлокодеру может и "повезти" и обращение выдаст именно i-й байт, но может быть и не так - с многомерными массивами или с теми или иными размерами элементов массива. Поэтому правильно все же использовать макросы и не изобретать велосипед.
0
DY HOTT
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 4,000
16.08.2010, 23:38 7
В винавр с памятью работа хитро идет

http://iosyitistromyss.ru/avr-uchebnyj- ... ateli.html

тут подробно расписано как мутить с прогмем. А то дается мне у вас все данные которые вы во флеш хотите пихнуть поселились в оперативке :)
0
DY HOTT
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 4,000
16.08.2010, 23:39 8
По чтению из памяти программ - не вкурил. Если без включения pgmsposi.h я просто присвою
c = LED_table[ i];

- то не будет работать, чтоль?
Работать то оно будет, но данные LED_table осядут в оперативке. А не во флеше. Вам же этого не хочется?
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
17.08.2010, 00:34 9
Цитата Сообщение от DY HOTT
В винавр с памятью работа хитро идет
...
тут подробно расписано как мутить с прогмем. А то дается мне у вас все данные которые вы во флеш хотите пихнуть поселились в оперативке :)
Мерси! Написано классно! Я, в общих чертах, разобрался. То, что

c = LED_table[ i];

не работает, уже ясно. Что программа укладывает в ОЗУ - так я и объявил сейчас так свой массив LED_table[]. И прекрасно разумею, что сначала эти 16 байт лягут в ПЗУ, а потом где-то в инициализации перекинутся в ОЗУ - потратится объем даже более 16 байт. Но меня пока это не печет. Я же из CVAVR ухожу именно для того, чтобы не париться с объемом в 3 КБ, как предельным (из-за демоверсионности). Первый этап - просто скомпилировать копию работающего в CVAVR проекта под AVRStudyo. Сегодня скомпилировал, прога, ИСТЕСНА, работает черт-те как, но это полечим.
А там и массивчик в ПЗУ засунем. Правильным образом.

Кстати, я (лет 20 назад) в прошивку любил забрасывать текстовые строки (где-то в начале ПЗУ), в которых указывал, что за прога и какая версия. И програмеров своих приучил так делать. При количестве прошивок в десятки и версий по дюжине - иногда пригождалось. Просто смотришь bin-файл и видишь, что это за произведение... Так этот стринг тоже указывался как ПЗУ-шный. Но там у нас кайловский компилятор работал.

Спасибо откликнувшимся! Для меня тема исчерпана, но глупых вопросов еще будет :)
0
OmikymForti
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 1,116
17.08.2010, 13:11 10
Меня немцы приучили писать не только авторство, но и версию прошивки.
0
qbyt
0 / 0 / 0
Регистрация: 13.08.2010
Сообщений: 58
21.08.2010, 23:38 11
Цитата Сообщение от OmykymForti
Меня немцы приучили писать не только авторство, но и версию прошивки.
Например, для версии так же полезно использовать такие максосы как __DATE__ и __TIME__. Т.е. автоматом получается и дата, и время собираемой версии.
0
21.08.2010, 23:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.08.2010, 23:38

IAR >> GCC
Нашёл код под IAR, как переделать под GCC. __no_init volatile union {...

AVRstudio 4 + GCC + ASM
Доброго времени суток! У меня назрел вопрос - можно ли использовать при...

GCC-AVR Linux
Вот такая констукция #asm .equ __y2s_port=0?12 ;PORTD .equ __sda_bit=0 .equ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru