WinAvr в вопросах и ответах
-
juzik
- Встал на лапы
- Сообщения: 128
- Зарегистрирован: Пт сен 23, 2011 23:49:20
- Откуда: Симферополь, Украина
Re: WinAvr в вопросах и ответах
А что есть CS0? Вы его определили? Может имеется в виду CS00/CS01/CS02? Какой камень?
- Реклама
-
slavik.ksu
- Первый раз сказал Мяу!
- Сообщения: 38
- Зарегистрирован: Пн авг 01, 2011 21:59:21
Re: WinAvr в вопросах и ответах
ATmega8515.
ну точно же!
CS0 это CS00
и все заработало! прошу прощения за такую глупость
спасибо большое!
ну точно же!
Re: WinAvr в вопросах и ответах
slavik.ksu писал(а):ATmega8515.
ну точно же!CS0 это CS00
и все заработало! прошу прощения за такую глупость
спасибо большое!
Код: Выделить всё
TCCR0 = (1<<CS00) | (1<<CS01);С уважением,
Виктор.
Виктор.
Re: WinAvr в вопросах и ответах
Здравствуйте. Подскажите как быть,допустим, составил программу с использованием EEPROM,прошиваем МК,а в EEPROM,после прошивки, данные имеют максимальные значения. Вот как с помощью WinAVR в EEPROM заносить определённые данные.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
если вы в своей программе описали переменные (ячейки) в eeprom, то при компиляции будет сгенерирован автоматически файл с начальным содержимым - этот файл просто программатором прошиваете и все.
однако, более правильным было бы, если бы ваша программа могла определить, что EEPROM не содержит начальных значений, и самостоятельно прошить их туда. если вы сделаете проверку EEPROM с подсчетом контрольной суммы - это в определенном смысле повысит надежность вашего девайса.
однако, более правильным было бы, если бы ваша программа могла определить, что EEPROM не содержит начальных значений, и самостоятельно прошить их туда. если вы сделаете проверку EEPROM с подсчетом контрольной суммы - это в определенном смысле повысит надежность вашего девайса.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Реклама
Re: WinAvr в вопросах и ответах
Так вот про это и говорю, мне надо как то внести,при прошивки, какое то значение EEPROM, т.к. при запуски программы
если в EEPROM все нули или максимум, получатся белеберда, которую можно исправить,но это очень долго, числа большие.
если в EEPROM все нули или максимум, получатся белеберда, которую можно исправить,но это очень долго, числа большие.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
так что не понятно-то? прошейте сгенерированный компилятром файл для EEPROM
битва с дураками проиграна, победители торжествуют. слава победителям!
-
juzik
- Встал на лапы
- Сообщения: 128
- Зарегистрирован: Пт сен 23, 2011 23:49:20
- Откуда: Симферополь, Украина
Re: WinAvr в вопросах и ответах
Если проблема заключается в том как выставить данные, которые надо залить в мк, то этот пример может помочь:
Здесь в EEPROM создается и инициализируется структура history_dump. Значения можно выставлять произвольные. При компиляции копилятор сделает помимо hex файлика еще и eep файл. Его нужно залить в мк отдельно. Это и будет прошивка EEPROM'а
Код: Выделить всё
static EEMEM HISTORY_MEASURE history_dump =
{
{
{{0,0,0,0,0,0,0}, 0,0,0,false}, {{0,0,0,0,0,0,0}, 0,0,0,false}, {{0,0,0,0,0,0,0}, 0,0,0,false}
},
0
};
Re: WinAvr в вопросах и ответах
Да проблема именно в этом,я пробовал ставить ваш код, компилятор ругается, этот код совместим с WinAVR.juzik писал(а):Если проблема заключается в том как выставить данные, которые надо залить в мк, то этот пример может помочь:
Здесь в EEPROM создается и инициализируется структура history_dump. Значения можно выставлять произвольные. При компиляции копилятор сделает помимо hex файлика еще и eep файл. Его нужно залить в мк отдельно. Это и будет прошивка EEPROM'аКод: Выделить всё
static EEMEM HISTORY_MEASURE history_dump = { { {{0,0,0,0,0,0,0}, 0,0,0,false}, {{0,0,0,0,0,0,0}, 0,0,0,false}, {{0,0,0,0,0,0,0}, 0,0,0,false} }, 0 };
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
рассказы про ругательства компилятора без приведенных конкретных сообщений об ошибках не принимаются. может, вы забыли avr/eeprom.h проинклюдить?
битва с дураками проиграна, победители торжествуют. слава победителям!
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: WinAvr в вопросах и ответах
Может и забыли, но этого может быть и недостаточно.Мастер Ломастер писал(а):может, вы забыли avr/eeprom.h проинклюдить?
Неясно что за имя HISTORY_MEASURE его тоже нужно объявить.
В поисках истины человек развивается.
Re: WinAvr в вопросах и ответах
Здравствуйте.
Пишу Bootloader для mega1280 на WinAVR-20100110. Не могу найти в описании WinAVR как перенести
таблицу прерываний в секцию bootloader'a. На ассемблере с помощью директивы .org, а здесь неясно.
Пишу Bootloader для mega1280 на WinAVR-20100110. Не могу найти в описании WinAVR как перенести
таблицу прерываний в секцию bootloader'a. На ассемблере с помощью директивы .org, а здесь неясно.
Последний раз редактировалось ULF21 Вт мар 06, 2012 20:52:04, всего редактировалось 1 раз.
Re: WinAvr в вопросах и ответах
Всё Спасибо кто пытался помочь, а решение нашёл вот такое, при объявлении адреса EEPROMа, просто пишется
данные:
EEMEM uint16_t adres2=4220;
Не знаю правельно или нет,но работает.
данные:
EEMEM uint16_t adres2=4220;
Не знаю правельно или нет,но работает.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
просто удивительно, как это вы смогли найти решение, котрое я вам бог знает когда сказал.
Мастер Ломастер писал(а):если вы в своей программе описали переменные (ячейки) в eeprom, то при компиляции будет сгенерирован автоматически файл с начальным содержимым - этот файл просто программатором прошиваете и все.
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: WinAvr в вопросах и ответах
Может Вы и правы в с своих объяснениях, но я ни чего не понял, мне бы примеры, но всё равно Спасибо.Мастер Ломастер писал(а):просто удивительно, как это вы смогли найти решение, котрое я вам бог знает когда сказал.Мастер Ломастер писал(а):если вы в своей программе описали переменные (ячейки) в eeprom, то при компиляции будет сгенерирован автоматически файл с начальным содержимым - этот файл просто программатором прошиваете и все.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: WinAvr в вопросах и ответах
на будущее: если вам нужен пример, то так и пишите "приведите пример для вот этого". у нас, экстрасенсов, все как у гугла: какое ключевое слово ввел - то и получил в выдачеTICLIR писал(а):Может Вы и правы в с своих объяснениях, но я ни чего не понял, мне бы примеры, но всё равно Спасибо.
битва с дураками проиграна, победители торжествуют. слава победителям!
- shurikss123
- Грызет канифоль
- Сообщения: 271
- Зарегистрирован: Пн окт 25, 2010 20:47:04
- Откуда: Казахстан, Астана
Re: WinAvr в вопросах и ответах
Всем добра, во общем столкнулся с такой проблемой, то ли я, то ли что?
если я делаю так
на дисплее получаю значение 21964 хотя по моей логике и всем возможным калькуляторам 87500
но если сделать так
то выдаст нормально как и положено 87500, кто нить может мне разъяснить в чем проблема, если во мне, исправлюсь.
если я делаю так
Код: Выделить всё
char buffer1[6];
ultoa((0x6d6 * 0x32), buffer1, 10);
LCDsendString(buffer1);но если сделать так
Код: Выделить всё
char buffer1[6];
ultoa(87500, buffer1, 10);
LCDsendString(buffer1);- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: WinAvr в вопросах и ответах
Всё дело в неявном приведении типов. Смотри, у тебя два числа: 0x6d6 и 0x32. Здесь, по видимому, если это возможно, компилятор приводит эти числа к типу int, т.е. здесь: 2-х байтовое целое. А теперь попробуем это посчитать. Как ты правильно нашёл, это будет равно 87500, но т.к. у нас число содержится в 2-х байтах, то происходит переполнение: 87500 - 65536 = 21964 (где 65536 = 2^16 - максимально возможное значение числа в 2-х байтах + 1) - это то что и вывелось на экран.
Чтобы оно правильно посчиталось, нужно явно указать компилятору, что число таки имеет тип long int, т.е. вот так:
Оно должно работать.
Чтобы оно правильно посчиталось, нужно явно указать компилятору, что число таки имеет тип long int, т.е. вот так:
Код: Выделить всё
char buffer1[6];
ultoa((0x6d6L * 0x32L), buffer1, 10);
LCDsendString(buffer1); - shurikss123
- Грызет канифоль
- Сообщения: 271
- Зарегистрирован: Пн окт 25, 2010 20:47:04
- Откуда: Казахстан, Астана
Re: WinAvr в вопросах и ответах
Вот спасибо я даже и не знал что так все просто.IfoR писал(а):Всё дело в неявном приведении типов. Смотри, у тебя два числа: 0x6d6 и 0x32. Здесь, по видимому, если это возможно, компилятор приводит эти числа к типу int, т.е. здесь: 2-х байтовое целое. А теперь попробуем это посчитать. Как ты правильно нашёл, это будет равно 87500, но т.к. у нас число содержится в 2-х байтах, то происходит переполнение: 87500 - 65536 = 21964 (где 65536 = 2^16 - максимально возможное значение числа в 2-х байтах + 1) - это то что и вывелось на экран.
Чтобы оно правильно посчиталось, нужно явно указать компилятору, что число таки имеет тип long int, т.е. вот так:
Оно должно работать.Код: Выделить всё
char buffer1[6]; ultoa((0x6d6L * 0x32L), buffer1, 10); LCDsendString(buffer1);
- shurikss123
- Грызет канифоль
- Сообщения: 271
- Зарегистрирован: Пн окт 25, 2010 20:47:04
- Откуда: Казахстан, Астана
Re: WinAvr в вопросах и ответах
Ещё вопросик к про спринтф, если добавить в код запись то размер увеличиться на 1,5 кб.
если использовать ultoa
если смысл ее (sprintf) использовать, если я ее буду использовать много кратно, памяти в принципе не жалко (mega168)
Код: Выделить всё
sprintf(buffer1,"%3i",d);
Program: 8264 bytes (50.4% Full)
(.text + .data + .bootloader)Код: Выделить всё
ultoa(d, buffer1, 10);
Program: 6756 bytes (41.2% Full)
(.text + .data + .bootloader)



