реклама на сайте
подробности

 
 
> перенос программы с IAR на AVR-GCC, нужна помощь..., вопросик для опытных в linux avr-gcc, нужна Ваша помошь...
PrSt
сообщение May 3 2007, 16:25
Сообщение #1


http://uschema.com
****

Группа: Свой
Сообщений: 708
Регистрация: 16-02-06
Из: UK(Ukrainian_Kingdom) Kharkov
Пользователь №: 14 394



Нужно произвести операцию: (именно под linux-AVR-GCC)
перенос программы с IAR на GCC, помогите пожалуйста решить возникшую проблемку...
вероятно все проблеммы по не знанию тонкостей или ньюансов...
сам с AVR не работал до этого толком....
возникли проблеммы в частности с с прерыванием...

программа была написанная на IAR, какойто там версии под контроллер ATMEGA161 (хотя камень впаян 162)...
Но все это работает с HEX от IAR

а нужно перенести под GCC и довольствоваться результатом...

я программу эту портировал под GCC...
Местати что надо подправил под специфику компилятора, полазив по инету и подсмотрев как...
например кое что тут - http://www.avrfreaks.net/wiki/index.php/Do...GCC/IarToAvrgcc

Получил HEX
патаюсь его прошить - прошиваю, даже загорается на платке светодиод...
...но светодиод должен сменить свой цвет при возникновении прерывания и остаться с этим значением...
Однако этого не происходит...

вот как было под IAR
#pragma vector=INT1_vect
__interrupt void INT1_(void) // INT1 interrupt service routine
{
.....
while(1){LED_RED;}
}

вот как теперь стало под GCC
#pragma vector=INT1_vect
//__interrupt void INT1_(void) // INT1 interrupt service routine
ISR (INT1_vect) // INT1 interrupt service routine // veter
{
....
while(1){LED_RED;}
}

и не работает...
в интернете на многих сайтах говорится что делать так и оно обязанно работать...
почему у меня не работает? Может какието гдето регистры?


заранее Большое-Человеческое спасибо ответевшим!


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
forever failure
сообщение May 5 2007, 04:07
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 256
Регистрация: 6-03-05
Из: Екатеринбург
Пользователь №: 3 112



Цитата
я нашел по ходу ошибку в ASM файле
было
;PORTA var 0x1b
/* ... */

стало
#define PORTA 0x1B


Коренное отличие GCC-ишного асма AVR от IAR-овского состоит в том, в GCC обращение к порту in/out делается через макроподстановку _SFR_IO_ADDR, т. е. Вам придётся в асмовском файле заменить все
in r**, PORT** на in r**, _SFR_IO_ADDR(PORT**).
Ну и проделать тоже с out, cbi, sbi. Тогда заработает.
Go to the top of the page
 
+Quote Post
ReAl
сообщение May 5 2007, 07:56
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(forever failure @ May 5 2007, 06:07) *
Коренное отличие GCC-ишного асма AVR от IAR-овского состоит в том, в GCC обращение к порту in/out делается через макроподстановку _SFR_IO_ADDR, т. е. Вам придётся в асмовском файле заменить все
in r**, PORT** на in r**, _SFR_IO_ADDR(PORT**).
Ну и проделать тоже с out, cbi, sbi. Тогда заработает.


Не обязательно.
Можно сделать так:

Код
#define __SFR_OFFSET 0
.nolist
#include <avr/io.h>
.list

           .section .text
           .global main
main:
    ; запис в OSCCAL - перша операція, щоб не змінювалася адреса
    ; команди LDI
    ldi temp, 0x80    $ out OSCCAL, temp
    ldi temp, (1<<ACD) $ out ACSR, temp
    ; Вихід NO_VIDEO вмикається відразу як активний.
    ldi temp, 0x19 $ out PORTB, temp
    ldi temp, 0x0B $ out DDRB, temp


и не морочить себе голову этим _SFR_IO_ADDR
Да, они сами пишут, что лучше морочить :-), но я ленюсь писать многа букафф. Даже если вдруг они переделают sfr_defs.h так, что #define __SFR_OFFSET 0 перестанет работать - напущу SED на те из старіх исходников, которіе надо поддерживать.

Ну а если адреса портов заданы вручную через #define PORTB и т.п., то тогда _SFR_IO_ADDR противопоказан, так как адрес задан уже правильно.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- PrSt   перенос программы с IAR на AVR-GCC, нужна помощь...   May 3 2007, 16:25
- - defunct   Вроде все ок, #pragma - лишняя, но поидее GCC ее п...   May 4 2007, 02:50
|- - PrSt   Цитата(defunct @ May 4 2007, 02:50) Вроде...   May 4 2007, 10:31
|- - PrSt   Цитата(defunct @ May 4 2007, 02:50) Вроде...   May 4 2007, 12:08
|- - aesok   Версия avr-libc, все сообщения компилятора, больш...   May 4 2007, 12:17
|- - PrSt   Цитата(aesok @ May 4 2007, 12:17) Версия ...   May 4 2007, 12:36
|- - aesok   Цитата(PrSt @ May 4 2007, 16:36) а что им...   May 4 2007, 10:54
|- - Dog Pawlowa   Цитата(PrSt @ May 4 2007, 15:36) // _SEI...   May 4 2007, 13:40
|- - defunct   Цитата(PrSt @ May 4 2007, 14:36) sei(); /...   May 4 2007, 18:50
- - Kuzmi4   Вообще то советовал бы поменять ISR на SIGNAL (INT...   May 4 2007, 12:34
- - Igor26   Может попробовать заменить sei(); на ASM-вставку т...   May 4 2007, 12:46
- - Hz!   А вы разрешаете калие-либо другие прерывания? Не м...   May 4 2007, 09:53
|- - PrSt   Цитата(Hz! @ May 4 2007, 12:53) А вы ...   May 4 2007, 11:45
- - mdmitry   >Вообще то советовал бы поменять ISR на >SIG...   May 4 2007, 20:13
- - mdmitry   В Си доступ к портам прост. Например, запись в пор...   May 5 2007, 10:25


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th August 2025 - 01:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016