Перейти к содержанию
    

не запускается С-шная программа

Hex файл который скомпилирован на ассемблере без проблем шьет микро-лер, а hex файл скомпилированный на С не хочет. При попытке стартовать пишет:

the contents of the HEX file does not fit in the selected device

 

Может в коде надо какой нибудь файл сделать include ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Hex файл который скомпилирован на ассемблере без проблем шьет микро-лер, а hex файл скомпилированный на С не хочет. При попытке стартовать пишет:

the contents of the HEX file does not fit in the selected device

 

Может в коде надо какой нибудь файл сделать include ?

 

В опциях компилятора или в make-файле необходимо задать соответствующий тип контроллера.

У Вас какой компилятор?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В опциях компилятора или в make-файле необходимо задать соответствующий тип контроллера.

У Вас какой компилятор?

 

Компилятор WinAvr. А МК ATmega8515. А как задать эти опции не подскажите?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Компилятор WinAvr. А МК ATmega8515. А как задать эти опции не подскажите?!

 

Утилита MFile меню Makefile->MCU type

Или ручками в самом make-файле - секция # MCU name

 

Прошу прощения, возможно, немного Вам наврал и программа просто "не влазит" в МК.

Но сначала, желательно, убедиться, что тип соответствует

 

Поправьте, если что не так...

 

А что за попытка "стартовать"? Что именно стартует?

Изменено пользователем tazik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все исправил. Спасибо!:) Теперь возникла другая проблема, программа которую я написал не работает. Не работает даже банальная программа - перемигивание светодиодов. А шить надо во флеш или в eeprom? В eeprom шью ноль эмоций (два светодиода постоянно горят). Во флеш шью программа странно работает. В чем разница зашить во флеш и зашить в eeprom, можно ли одновременно в оба?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все исправил. Спасибо!:) Теперь возникла другая проблема, программа которую я написал не работает. Не работает даже банальная программа - перемигивание светодиодов. А шить надо во флеш или в eeprom? В eeprom шью ноль эмоций (два светодиода постоянно горят). Во флеш шью программа странно работает. В чем разница зашить во флеш и зашить в eeprom, можно ли одновременно в оба?

 

Пожалуйста :)

 

Flash - память программ. Т.е. шить нужно в нее

Eeprom - энергонезависимая память для пользовательских данных (для каких-нибудь Ваших калибровочных констант, переменных счетчиков и т.п.)

SRAM - энергозависимая память для пользовательских данных.

 

сразу в оба не надо ))

 

Приведите текст программы, плиз

Изменено пользователем tazik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал только во флеш, все равно не работает...

Ну вот например такая программка:

 

#include <avr/io.h>

#include <avr/delay.h>

 

int main(void)

{

DDRB = 0;

DDRD = 0xFF;

int i;

i = 0x1;

PORTD = i;

while(1)

{

i = i*2;

if (i>255) i=0x1;

PORTD = i;

_delay_loop_2(1000);

}

}

 

или из книжки к STK500:

 

;программка должна при нажатии на кнопку высветить соответствующий светодиод

.include "m16def.inc"

.def Temp =r16 ; Регистр хранения временных данных

.def Delay =r17 ; Переменная 1 для генерации задержки

.def Delay2 =r18 ; Переменная 2 для генерации задержки

;***** Инициализация

RESET:

ser temp

out DDRB, temp ; Настройка порта В (PORTB) на вывод

;**** Тестирование ввода/вывода

LOOP:

out PORTB,temp ; Обновление состояния светодиодов

sbis PIND,0x00 ; Если PortD.0 = 0,

inc temp ; то уменьшение на 1 двоичного кода, формируемого свечением светодиодов

sbis PIND,0x01 ; Если PortD.1 = 0,

dec Temp ; то увеличение на 1 двоичного кода, формируемого свечением светодиодов

sbis PIND,0x02 ; Если PortD.2 = 0,

ror Temp ; то циклический сдвиг состояния светодиодов на 1 вправо

sbis PIND,0x03 ; Если PortD.3 = 0,

rol Temp ; то циклический сдвиг состояния светодиодов на 1 влево

sbis PIND,0x04 ; Если PortD.4 = 0,

com Temp ; то инверсия состояния всех светодиодов

sbis PIND,0x05 ; Если PortD.5 = 0,

neg Temp ; то инверсия состояния и прибавление 1

sbis PIND,0x06 ; Если PortD.6 = 0,

swap Temp ; то обмен тетрадами светодиодов

;**** Далее необходима задержка, чтобы сделать проделанные изменения видимыми

DLY:

dec Delay

brne DLY

dec Delay2

brne DLY

rjmp LOOP ; Повторение цикла заново

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#include <avr/io.h>  
#include <avr/delay.h>    

int main(void)  {  
DDRB = 0;  
DDRD = 0xFF;  
int i;  
i = 0x1;  
PORTD = i;  
while(1)  {  
   i = i*2;  
   if (i>255) i=0x1;  
   PORTD = i;  
   _delay_loop_2(1000);  
   }  
}

 

Ну так а какая именно программа работает "не так"? В чем именно заключается эта "нетаковость"?

 

Проверьте, соответствует ли частота работы МК, указанная в make-файле, реальному кварцу.

 

Бегущий огонь? Ничего не перепутал? Все светодиоды светятся?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не работают обе программы! После включения платы постоянно горят два правых светодиода. И все! А что частоты должны обязательно совпадать? Какую частоту нужно ставить?

 

Вы правильно заметили это бегущий огонь.. должен был быть :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не работают обе программы! После включения платы постоянно горят два правых светодиода. И все! А что частоты должны обязательно совпадать? Какую частоту нужно ставить?

 

Вы правильно заметили это бегущий огонь.. должен был быть :)

 

Частота, для которой компилируется программа (указанная в makefile) должна соответствовать частоте кварца, установленного на Вашей плате. Т.к. она используется, например, при "расчете" компилятором необходимого времени задержки.

 

В общем, есть подозрение, что 1-ая программа-то у Вас работает. Только слишком быстро - и на глаз этого не видно.

 

По поводу второй программы. У Вас применяется контроллер mega16?

Изменено пользователем tazik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По умолчанию winAVR ставит частоту кварца 8 МГц (F_CPU = 8000000 - это в makefile-e).

Есть вариант что у тебя программа "виснет" - не инициализирован сторожевой таймер.

 

DDRB = 0;

DDRD = 0xFF;

int i;

 

Если пишешь на С то в начале инициализация переменных, а потом операции с ними.

 

Какой у тебя кварц стоит ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По умолчанию winAVR ставит частоту кварца 8 МГц (F_CPU = 8000000 - это в makefile-e).

Есть вариант что у тебя программа "виснет" - не инициализирован сторожевой таймер.

 

DDRB = 0;

DDRD = 0xFF;

int i;

 

Если пишешь на С то в начале инициализация переменных, а потом операции с ними.

 

Какой у тебя кварц стоит ?

 

А как инициализировать сторожевой таймер? Я объявляю i а потом использую ее, что не так? Кварц вижу а частоту нет. Написано 737*8 звездочка это непонятный символ я не разобрал )

 

Проверьте FUSE, правильно ли они стоят?

 

Не подскажите как должно быть правильно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как инициализировать сторожевой таймер? Я объявляю i а потом использую ее, что не так? Кварц вижу а частоту нет. Написано 737*8 звездочка это непонятный символ я не разобрал )

Не подскажите как должно быть правильно

 

Так а железо у Вас какое? STK500? Может быть не 737*8, а 32768?

Изменено пользователем tazik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так а железо у Вас какое? STK500? Может быть не 737*8, а 32768?

 

Нет. Точно начинается с этих цифр. Но возможно то что я имел ввиду под кварцем вовсе не кварц. Просто других похожих нет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...