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

 
 
> Портирование программы с IAR на WinAVR (GCC), тонкости с асемблером
PrSt
сообщение Nov 14 2007, 11:37
Сообщение #1


http://uschema.com
****

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



привет всем!

Портировать пришлось программу из среды IAR на среду WinAVR (GCC), и столкнулся с тем что я чегото не понимаю или не знаю...
помогите плиз разобраться

Вот привожу кусок кода как это было под IAR
Код
NAME loader
;     INCLUDE ""
     PUBLIC loader6000
     RSEG CODE  

.globl loader6000

SCLK  DEFINE 0
Data  DEFINE 1
Latch DEFINE 2

PORTA var 18h    

.text      
loader6000;
...
...



Но программу нужно портировать на WinAVR

А вот как я сделал под WinAVR

Код
;NAME loader
;;     INCLUDE ""
;     PUBLIC loader6000
;     RSEG CODE  

.globl loader6000


;SCLK  DEFINE 0
;Data  DEFINE 1
;Latch DEFINE 2
#define SCLK  0
#define Data  1
#define Latch 2

;PORTA var 18h    
PORTA = 0x18    

.text      
;loader6000;
loader6000:
....


Программа компиллируется но не работает

я так подозреваю что я некоррктно першел от записи PORTA var 18h или чтото не так понял как правильно интерпретировать иаровский DEFINE
Код
SCLK  DEFINE 0
Data  DEFINE 1
Latch DEFINE 2

PORTA var 18h


к записи

Код
#define SCLK  0
#define Data  1
#define Latch 2

PORTA = 0x18


я не могу понять как ему можно еще сказать.
как сделать правильно?
подскажите плиз!




.


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alcosar
сообщение Nov 16 2007, 14:31
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 30-03-06
Пользователь №: 15 598



У Вас
Код
Data:      65087 bytes (1627.2% Full)
(.data + .bss + .noinit)


Цитата
тоесть программа собирается
но полученный хекс файл не работает...


озу заполненно на 1627.2%. Не здесь ли собака порылась.
Go to the top of the page
 
+Quote Post
PrSt
сообщение Nov 19 2007, 13:08
Сообщение #3


http://uschema.com
****

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



проблема с памятью решена

...наткнулся на следующую проблемму, присущую именно пути портирования с IAR на GCC

как я понял из инета проблема эта у многих, не не понял как ее обходят, да и не нашел по форумам.

дело в том что в той программе что я редактирую есть некоторое веселье, в ней используется 2 длинных массива по 32k тоесть всего 64К данных в массиве и чуточку кода на 20К

...в иаре они были объявленны как
farflash unsigned char ga_field [32385] = {
0x0FF,0x0FF,....
}

Но для GCC я их сделал как
//farflash unsigned char ga_field [32385] = {
//__attribute__((progmem))
__ATTR_PROGMEM__ const unsigned char ga_field [32385] = {
0x0FF,0x0FF,....
}

если верить что я все верно понял их мануала на GCC и из интернета - то это правильно
Но есть у AVR друга проблемма, он не умеет прагать через длину кода с раздывом в адресе в 64K....

и видать с этим сзязано подвисание, вот я его локализовал и вот это место


SPDR = ga_field[i];
// veter
//------------------------------------------
// YELOW_1; //LED1_off; LEDs |= LED1C
RED_1; //LED1_off; LEDs |= LED1A
// YELOW_2; //LED2_off; LEDs |= LED2C
RED_2; //LED2_off; LEDs |= LED2A
//------------------------------------------
while(!(SPSR&SPIF));
// veter
//------------------------------------------
YELOW_1; //LED1_off; LEDs |= LED1C
// RED_1; //LED1_off; LEDs |= LED1A
YELOW_2; //LED2_off; LEDs |= LED2C
// RED_2; //LED2_off; LEDs |= LED2A
//------------------------------------------

так вот я вижу только загоревшиеся красные сретодиоды RED_1; и RED_2; и потом срабатывает ватч дог на опереции чтения флага статуса о собитии прерывания - while(!(SPSR&SPIF));.
тоесть желтых не вижу - что и логично раз сработал ватчдог.

значит проблемма может быть или при операции (SPDR = ga_field[i] wink.gif или же в вызове чтения флага прерывания...

теперь,
помогите пожалуйста дальше разобраться - а то тут я не могу уже понять куда копать

Ребята - крыша улетает, нид хелп.

.


--------------------
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 19 2007, 13:33
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



По объявлению - можно и так: prog_uint8_t ga_field [32385] = {...};
По коду: Во-первых SPDR = pgm_read_byte(&ga_field[i]); А почему собака - трудно сказать. Передача по SPI идет? Попробуйте просто передавать что-нибудь типа SPDR = 0xAA, может у вас SPI не проинициализирован и передачи нет, поэтому и флаг не выставляется.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
PrSt
сообщение Nov 19 2007, 13:57
Сообщение #5


http://uschema.com
****

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



Цитата(Сергей Борщ @ Nov 19 2007, 15:33) *
По объявлению - можно и так: prog_uint8_t ga_field [32385] = {...};
По коду: Во-первых SPDR = pgm_read_byte(&ga_field[i]); А почему собака - трудно сказать. Передача по SPI идет? Попробуйте просто передавать что-нибудь типа SPDR = 0xAA, может у вас SPI не проинициализирован и передачи нет, поэтому и флаг не выставляется.


через SPDR = pgm_read_byte(&ga_field[i]); - щас попробую, покапаю в эту сторону

SPI - еще не тестится осциллограффом по прицине что прибор закрыт пока, хотя возможно прийдется его разбирать.

до SPI еще дело не дошло как мне кажется
и следующий тест это подтвердил
вот я сделал ловушку
SPDR = ga_field[i];
if (ga_field[0]==0x00){
// veter
//------------------------------------------
// YELOW_1; //LED1_off; LEDs |= LED1C
RED_1; //LED1_off; LEDs |= LED1A
YELOW_2; //LED2_off; LEDs |= LED2C
// RED_2; //LED2_off; LEDs |= LED2A
//------------------------------------------
while (1);
}

и программа на эту ловушку словилась
потому что споймала 0х00 вместо значения из массива 0xFF

таким образом становится очевидно что продлемма кроется скорее не в прерывании на данном этапе а на полученном значении из массива

.


--------------------
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- PrSt   Портирование программы с IAR на WinAVR (GCC)   Nov 14 2007, 11:37
- - forever failure   да так же и записать: #define PORTA ...   Nov 14 2007, 12:26
- - GDI   Что то я не понял что за программа такая и на како...   Nov 14 2007, 12:33
|- - PrSt   Цитата(GDI @ Nov 14 2007, 14:33) Что то я...   Nov 14 2007, 13:26
- - forever failure   #include <avr/io.h> а в командной строке ком...   Nov 14 2007, 13:35
|- - PrSt   Цитата(forever failure @ Nov 14 2007, 15...   Nov 14 2007, 13:50
- - forever failure   Практика - вот единственный критерий правильности....   Nov 14 2007, 14:10
|- - PrSt   Цитата(forever failure @ Nov 14 2007, 16...   Nov 14 2007, 14:35
- - ReAl   Код.nolist #define __SFR_OFFSET 0 #include <av...   Nov 14 2007, 15:27
- - forever failure   Просто по выходу препроцессора можно посмотреть ка...   Nov 14 2007, 16:20
- - mdmitry   В исходном файле должны быть соответствующие загол...   Nov 14 2007, 21:09
|- - PrSt   Цитата(mdmitry @ Nov 14 2007, 23:09) В ис...   Nov 15 2007, 08:28
- - mdmitry   У Вас действительно atmega103? Для разбора проблем...   Nov 15 2007, 20:08
|- - PrSt   Цитата(mdmitry @ Nov 15 2007, 22:08) У Ва...   Nov 16 2007, 12:53
- - PrSt   Цитата(alcosar @ Nov 16 2007, 16:31) У Ва...   Nov 16 2007, 15:27
- - PrSt   Цитата(Сергей Борщ @ Nov 19 2007, 15:33) ...   Nov 20 2007, 08:11
- - Сергей Борщ   Цитата(PrSt @ Nov 20 2007, 10:11) не помо...   Nov 20 2007, 08:40
- - PrSt   Цитата(Сергей Борщ @ Nov 20 2007, 10:40) ...   Nov 20 2007, 08:55
- - Сергей Борщ   Цитата(PrSt @ Nov 20 2007, 10:55) разобра...   Nov 20 2007, 09:33
- - PrSt   Цитата(Сергей Борщ @ Nov 20 2007, 11:33) ...   Nov 20 2007, 10:25
- - PrSt   Цитата(Сергей Борщ @ Nov 20 2007, 11:33) ...   Nov 20 2007, 14:51
- - Сергей Борщ   Цитата(PrSt @ Nov 20 2007, 16:51) Код SP...   Nov 20 2007, 14:58


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 21:05
Рейтинг@Mail.ru


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