CodeVision AVR в вопросах и ответах
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Спасибо за совет. Вечером протестирую!
Самое гениальное - всегда самое простое
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Всем привет. За предыдущий совет спасибо! Помогло.
Возник вопрос по CVAVR и функции Sprintf: вместо значащих нулей перед десятичным числом выводит пробелы:
К примеру R у меня 1009. R%100 выдает 09, а sprintf выдает " 9". То есть все нули заменяет пробелами, хотя должна бы вывести нули. Как мне быть в этой ситуации?
Возник вопрос по CVAVR и функции Sprintf: вместо значащих нулей перед десятичным числом выводит пробелы:
Код: Выделить всё
sprintf (lcd_buf,"%2d",R%100);К примеру R у меня 1009. R%100 выдает 09, а sprintf выдает " 9". То есть все нули заменяет пробелами, хотя должна бы вывести нули. Как мне быть в этой ситуации?
Самое гениальное - всегда самое простое
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
WiseLord писал(а):%02d
Спасибо. Помогло!
Самое гениальное - всегда самое простое
-
Igorek0071
- Родился
- Сообщения: 18
- Зарегистрирован: Вс дек 15, 2013 19:01:26
Re: CodeVision AVR в вопросах и ответах
Мужики! Помогите! Начал изучать AVR программирование неделю назад, читал книги, сегодня решил взяться за практику.. Вообщем, написал код, а он при компиляции в CodeVision AVR выдает ошибку первой строки! Ошибок там нет! Я не знаю почему не компилируется! Пробовал разные версии программы, не помогает.. Вот код..
Как устранить проблему? Не компилируется не при каких кодах! Всегда выдает эту ошибку!Благодарю!
Код: Выделить всё
#include <mega8.h>
#include <delay.h>
void main(void)
{
PORTB=0x00
DDRB=0x01
while (1)
{
PORTB.0=1
delay_ms(200)
PORTB.0=0
delay_ms(200)
};
};Как устранить проблему? Не компилируется не при каких кодах! Всегда выдает эту ошибку!Благодарю!
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Какую - это? Где текст ошибки?Igorek0071 писал(а):Всегда выдает эту ошибку!
-
Igorek0071
- Родился
- Сообщения: 18
- Зарегистрирован: Вс дек 15, 2013 19:01:26
Re: CodeVision AVR в вопросах и ответах
WiseLord писал(а):Какую - это? Где текст ошибки?Igorek0071 писал(а):Всегда выдает эту ошибку!
Самую первую строчку
Текст ошибки
Error: C:\Users\Àäìèíèñòðàòîð\Desktop\Ìèãà\123.c(2): can't open #include file: mega8.h
-
Rtmip
- Держит паяльник хвостом
- Сообщения: 963
- Зарегистрирован: Чт апр 03, 2014 23:16:55
- Откуда: Россия
Re: CodeVision AVR в вопросах и ответах
Похоже не может открыть файл mega8.h, потому что у вас русские буквы в пути к файлу.
Переустановите CVAVR так, чтобы не было русских букв и пробелов в папке установки.
Переустановите CVAVR так, чтобы не было русских букв и пробелов в папке установки.
Re: CodeVision AVR в вопросах и ответах
Пытаюсь написать программу для Mega8 но "забуксовал" в переходах между строк. Сразу скажу, опыт в программировании (и то на старых компах с DOS) есть только на уровне Qbasic (если программу писал на нем, то проблем не было, воспользовался бы оператором перехода GOTO на нужную строку)
Прилагаю блок-схему программы, которую пытаюсь написать и небольшой кусочек того на чем "забуксовал".
Просьба подскажите как эти переходы делать, или напишите этот небольшой кусочек программы, а я уж постараюсь сам дальше продолжить.
Прилагаю блок-схему программы, которую пытаюсь написать и небольшой кусочек того на чем "забуксовал".
Просьба подскажите как эти переходы делать, или напишите этот небольшой кусочек программы, а я уж постараюсь сам дальше продолжить.
- Вложения
-
- Малый кусок.png
- (4.85 КБ) 368 скачиваний
-
- Блок схема.png
- (15.54 КБ) 347 скачиваний
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Бывает частенько в симуляции прога перестает работать, при отладке видно что не везде присвоен адресс. Почему так бывает? Обычно решается полным сносом кода и добавлением частями.
- Вложения
-
- Безымянный.jpg
- (85 КБ) 229 скачиваний
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
так бывает потому, что написанный вами код компилятор считает избыточным: он умеет сделать то же самое меньшим количеством действий, вот и получается для некоторых ваших строк просто нет соответствующих машинных кодов. как правило такая ситуация возникает в 2-ух случаях: когда включен мощный режим оптимизации и когда программист сам не до конца понимает, что именно он такого наваял. а компилятор понимает и лишнее выкидывает 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
misterkuk
- Мучитель микросхем
- Сообщения: 400
- Зарегистрирован: Сб апр 17, 2010 10:30:13
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
ARV писал(а): как правило такая ситуация возникает в 2-ух случаях: когда включен мощный режим оптимизации и когда программист сам не до конца понимает, что именно он такого наваял. а компилятор понимает и лишнее выкидывает
Спасибо за исчерпывающий ответ, буду коректировать программу.
........
И да, помогла оптимизация. Всё решилось.
Re: CodeVision AVR в вопросах и ответах
Какой критерий выбора размера Data Stack Size ? По умолчанию стоит 32. Стоит ли его увеличивать, до какого значения, чем при этом руководствоваться? На что влияет слишком большое его значение?
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: CodeVision AVR в вопросах и ответах
Стэк располагается в конце ОЗУ.
При вызове подпорграмм и прерываний в него заносится точка возврата (счётчик команд), сохраняется регистр статуса и прочие регистры, которые задействуются. Если одна подпрограмма будет вызывать другую, а та — третью, третья — четвёртую... То размер стэка может стать больше отведённых (32) байт, и начнёт налезать и затирать переменные, находящиеся в ОЗУ.
При вызове подпорграмм и прерываний в него заносится точка возврата (счётчик команд), сохраняется регистр статуса и прочие регистры, которые задействуются. Если одна подпрограмма будет вызывать другую, а та — третью, третья — четвёртую... То размер стэка может стать больше отведённых (32) байт, и начнёт налезать и затирать переменные, находящиеся в ОЗУ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: CodeVision AVR в вопросах и ответах
Но если мы сразу же увеличим стек, ну скажем до 200байт, то эти байты сразу же будут зарезервированы из ОЗУ? Т.о. мы уменьшим размер ОЗУ, но исключим затирание данных в ОЗУ ?
- Gudd-Head
- Друг Кота
- Сообщения: 20091
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: CodeVision AVR в вопросах и ответах
Типа того. Если вы захотите больше переменных, компилятор ругнётся что места в ОЗУ нет — отдано под стек.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
речь идет о стеке данных - там не будет адресов возврата. но в остальном верно.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: CodeVision AVR в вопросах и ответах
1. При подключении LCD нигде в коде не определяется к какому порту какой вывод LCD подключается. Каким образом МК "знает" на каких пинах у него висит LCD ?
2. Стоит ли определять выводы порта, на котором висит LCD, как выходы/входы? Или просто из кода выкинуть лишнее (выводы к которым LCD подключен)?
3. Можно ли использовать эти выводы для чего-то другого в периоды времени, когда LCD не используется?
Прицепил на вывод данных LCD светодиод. Мыргает нормально, данные на LCD выводит. (в Протеусе). Похоже, что можно....
2. Стоит ли определять выводы порта, на котором висит LCD, как выходы/входы? Или просто из кода выкинуть лишнее (выводы к которым LCD подключен)?
3. Можно ли использовать эти выводы для чего-то другого в периоды времени, когда LCD не используется?
Прицепил на вывод данных LCD светодиод. Мыргает нормально, данные на LCD выводит. (в Протеусе). Похоже, что можно....
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
1. Во первых. "знает" не МК, а компилятор. Во вторых. если в коде нигде ноги не определены, каким образом компилятор о них узнает ? Да и каким образом Вы вообще будете обращаться к этим ногам, не зная их ?
2. Странный вопрос. Естественно, ногам, по которым Вы собрались манипулировать дисплеем, нужно определять направление. А как ещё иначе ?
3. Можно.
2. Странный вопрос. Естественно, ногам, по которым Вы собрались манипулировать дисплеем, нужно определять направление. А как ещё иначе ?
3. Можно.