|
не запускается С-шная программа |
|
|
|
Apr 30 2008, 14:31
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 18-04-08
Пользователь №: 36 883

|
Hex файл который скомпилирован на ассемблере без проблем шьет микро-лер, а hex файл скомпилированный на С не хочет. При попытке стартовать пишет: the contents of the HEX file does not fit in the selected device
Может в коде надо какой нибудь файл сделать include ?
|
|
|
|
|
Apr 30 2008, 14:40
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Цитата(Azat @ Apr 30 2008, 22:31)  Hex файл который скомпилирован на ассемблере без проблем шьет микро-лер, а hex файл скомпилированный на С не хочет. При попытке стартовать пишет: the contents of the HEX file does not fit in the selected device
Может в коде надо какой нибудь файл сделать include ? В опциях компилятора или в make-файле необходимо задать соответствующий тип контроллера. У Вас какой компилятор?
|
|
|
|
|
Apr 30 2008, 14:45
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 18-04-08
Пользователь №: 36 883

|
Цитата(tazik @ Apr 30 2008, 18:40)  В опциях компилятора или в make-файле необходимо задать соответствующий тип контроллера. У Вас какой компилятор? Компилятор WinAvr. А МК ATmega8515. А как задать эти опции не подскажите?!
|
|
|
|
|
Apr 30 2008, 14:59
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Цитата(Azat @ Apr 30 2008, 22:45)  Компилятор WinAvr. А МК ATmega8515. А как задать эти опции не подскажите?! Утилита MFile меню Makefile->MCU type Или ручками в самом make-файле - секция # MCU name Прошу прощения, возможно, немного Вам наврал и программа просто "не влазит" в МК. Но сначала, желательно, убедиться, что тип соответствует Поправьте, если что не так... А что за попытка "стартовать"? Что именно стартует?
Сообщение отредактировал tazik - Apr 30 2008, 15:13
|
|
|
|
|
Apr 30 2008, 15:55
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 18-04-08
Пользователь №: 36 883

|
Все исправил. Спасибо!:) Теперь возникла другая проблема, программа которую я написал не работает. Не работает даже банальная программа - перемигивание светодиодов. А шить надо во флеш или в eeprom? В eeprom шью ноль эмоций (два светодиода постоянно горят). Во флеш шью программа странно работает. В чем разница зашить во флеш и зашить в eeprom, можно ли одновременно в оба?
|
|
|
|
|
Apr 30 2008, 16:04
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Цитата(Azat @ Apr 30 2008, 23:55)  Все исправил. Спасибо!:) Теперь возникла другая проблема, программа которую я написал не работает. Не работает даже банальная программа - перемигивание светодиодов. А шить надо во флеш или в eeprom? В eeprom шью ноль эмоций (два светодиода постоянно горят). Во флеш шью программа странно работает. В чем разница зашить во флеш и зашить в eeprom, можно ли одновременно в оба? Пожалуйста  Flash - память программ. Т.е. шить нужно в нее Eeprom - энергонезависимая память для пользовательских данных (для каких-нибудь Ваших калибровочных констант, переменных счетчиков и т.п.) SRAM - энергозависимая память для пользовательских данных. сразу в оба не надо )) Приведите текст программы, плиз
Сообщение отредактировал tazik - Apr 30 2008, 16:05
|
|
|
|
|
Apr 30 2008, 16:20
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 18-04-08
Пользователь №: 36 883

|
Пробовал только во флеш, все равно не работает... Ну вот например такая программка:
#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 ; Повторение цикла заново
|
|
|
|
|
Apr 30 2008, 16:33
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Код #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-файле, реальному кварцу. Бегущий огонь? Ничего не перепутал? Все светодиоды светятся?
|
|
|
|
|
Apr 30 2008, 16:50
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 18-04-08
Пользователь №: 36 883

|
Не работают обе программы! После включения платы постоянно горят два правых светодиода. И все! А что частоты должны обязательно совпадать? Какую частоту нужно ставить? Вы правильно заметили это бегущий огонь.. должен был быть
|
|
|
|
|
Apr 30 2008, 17:05
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Цитата(Azat @ May 1 2008, 00:50)  Не работают обе программы! После включения платы постоянно горят два правых светодиода. И все! А что частоты должны обязательно совпадать? Какую частоту нужно ставить? Вы правильно заметили это бегущий огонь.. должен был быть  Частота, для которой компилируется программа (указанная в makefile) должна соответствовать частоте кварца, установленного на Вашей плате. Т.к. она используется, например, при "расчете" компилятором необходимого времени задержки. В общем, есть подозрение, что 1-ая программа-то у Вас работает. Только слишком быстро - и на глаз этого не видно. По поводу второй программы. У Вас применяется контроллер mega16?
Сообщение отредактировал tazik - Apr 30 2008, 17:43
|
|
|
|
|
Apr 30 2008, 17:51
|
Участник

Группа: Новичок
Сообщений: 33
Регистрация: 13-08-07
Пользователь №: 29 751

|
По умолчанию winAVR ставит частоту кварца 8 МГц (F_CPU = 8000000 - это в makefile-e). Есть вариант что у тебя программа "виснет" - не инициализирован сторожевой таймер.
DDRB = 0; DDRD = 0xFF; int i;
Если пишешь на С то в начале инициализация переменных, а потом операции с ними.
Какой у тебя кварц стоит ?
|
|
|
|
|
May 1 2008, 12:34
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 18-04-08
Пользователь №: 36 883

|
Цитата(fpmoleg @ Apr 30 2008, 21:51)  По умолчанию winAVR ставит частоту кварца 8 МГц (F_CPU = 8000000 - это в makefile-e). Есть вариант что у тебя программа "виснет" - не инициализирован сторожевой таймер.
DDRB = 0; DDRD = 0xFF; int i;
Если пишешь на С то в начале инициализация переменных, а потом операции с ними.
Какой у тебя кварц стоит ? А как инициализировать сторожевой таймер? Я объявляю i а потом использую ее, что не так? Кварц вижу а частоту нет. Написано 737*8 звездочка это непонятный символ я не разобрал ) Цитата(mdmitry @ May 1 2008, 01:39)  Проверьте FUSE, правильно ли они стоят? Не подскажите как должно быть правильно
|
|
|
|
|
May 1 2008, 12:51
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 13-05-07
Из: Норильск
Пользователь №: 27 691

|
Цитата(Azat @ May 1 2008, 20:34)  А как инициализировать сторожевой таймер? Я объявляю i а потом использую ее, что не так? Кварц вижу а частоту нет. Написано 737*8 звездочка это непонятный символ я не разобрал ) Не подскажите как должно быть правильно Так а железо у Вас какое? STK500? Может быть не 737*8, а 32768?
Сообщение отредактировал tazik - May 1 2008, 12:57
|
|
|
|
|
May 2 2008, 16:37
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 18-04-08
Пользователь №: 36 883

|
Цитата(tazik @ May 1 2008, 16:51)  Так а железо у Вас какое? STK500? Может быть не 737*8, а 32768? Нет. Точно начинается с этих цифр. Но возможно то что я имел ввиду под кварцем вовсе не кварц. Просто других похожих нет
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|