Страница 148 из 160

Re: AVR studio в вопросах и ответах

Добавлено: Вс дек 01, 2019 07:52:20
jes
К сожалению, все, что прочитал на разных форумах по своей проблеме - не помогло.
Решил проблему тем, что, поставил AVR Studio v4.12 в связке с WinAVR-20060421, сейчас нормально работает с СИ-шными файлами, и компилирует, и передает данные в отладчик самой студии.
Еще было желание попробовать AVR-toolchain-Windows, но, пока все работает - решил не трогать.

Всем спасибо за участие.

Re: AVR studio в вопросах и ответах

Добавлено: Чт янв 16, 2020 13:24:44
RUNA
Доброго времени суток.
Установлена AVR_studio, версия 4.18 В качестве операционки - WIN_7 64бит.
При включении отладки переставляет окна в произвольном порядке. Как это можно исправить?

Re: AVR studio в вопросах и ответах

Добавлено: Чт янв 16, 2020 14:55:04
Ярослав555
А у меня иар. Для писания кода и отладки у него видимо разный набор настроек окошек - какие и где. А иногда он сбрасывает некоторые окошки, прячет дерево проекта... В общем наблюдаю это уже пару лет. Как-то смирился. Авр умирает потихоньку, а с армовского иара планирую сьезжать.

Re: AVR studio в вопросах и ответах

Добавлено: Чт янв 16, 2020 17:00:07
RUNA
У меня раньше то кого не было. Появилась где то с пол года назад.

Re: AVR studio в вопросах и ответах

Добавлено: Сб янв 18, 2020 19:02:57
рокки1945
привет, - почему elf со Студио пустой в Proteus. Хочется watch window лицезреть и что происходит с переменными.

Re: AVR studio в вопросах и ответах

Добавлено: Вс янв 19, 2020 14:17:47
ARV
Во-первых, должна быть включена генерация отладочной информации при компиляции в студии (обычно так и есть, проверьте).
Во-вторых, исходники должны быть в той же папке, что и проект протеуса (ну или проект протеуса сохраняйте в папку с исхрдниками).
В-третьих, начиная с версии avr-gcc 4.xx, протеуса не понимает многое из того, что компилятор натворил, и просмотр переменных, как и отладка вообще, становится чертовски загадочным процессом...

Re: AVR studio в вопросах и ответах

Добавлено: Вс янв 19, 2020 17:19:15
рокки1945
странно, почему файлы Flowcode - Proteus нормально обрабатывает
Во-вторых, исходники должны быть в той же папке, что и проект протеуса (ну или проект протеуса сохраняйте в папку с исхрдниками). - ПОМОГЛО!

Re: AVR studio в вопросах и ответах

Добавлено: Вт янв 21, 2020 20:10:16
рокки1945
Привет !!!
Подскажите почему не симулируется ватчдог в Протеусе - подскажите какие настройки надо установить може FUSE?
#define F_CPU 8000000
#include <avr/io.h>

int main(void)
{
DDRB |= (1<<3); //на выход
PORTB &=~(1<<3); // ноль
DDRD &=0xF8; // на вход
PORTD |=0x07; // подтягивающие
while(1)
{
if (~PIND&(1<<0)) // отключение ватчдога
{
WDTCR |=(1<<4) | (1<<3);
WDTCR &=~(1<<3);
}
if (~PIND&(1<<1)) // подключение ватчдога
{
WDTCR |= (1<<4) | (1<<3) | (1<<2) | (1<<1) | (1<<0);
PORTB |= (1<<3);
}
if (~PIND&(1<<2)) // сброс ватчдога
{
asm ("wdr");
}
}
}

Re: AVR studio в вопросах и ответах

Добавлено: Ср янв 22, 2020 20:00:10
рокки1945
всё получилось
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
DDRB |= (1<<1); //на выход
PORTB &=~(1<<1); // ноль
DDRD &=0xF8; // на вход
PORTD |=0x07; // подтягивающие
while(1)
{
if (~PIND&(1<<0)) // отключение ватчдога
{
//_delay_ms(300);
WDTCR |=(1<<4) | (1<<3);
WDTCR &=~(1<<3);
}
if (~PIND&(1<<1)) // подключение ватчдога
{
//_delay_ms(300);
WDTCR |= (1<<4) | (1<<3);
WDTCR |= (1<<3) | (1<<2) | (1<<1) | (1<<0);
PORTB |= (1<<1);
}
if (~PIND&(1<<2)) // сброс ватчдога
{
//_delay_ms(300);
asm ("wdr");
}
}

Re: AVR studio в вопросах и ответах

Добавлено: Пт янв 24, 2020 13:22:39
serg_svd
Столкнулся с одной непонятной проблемой. Нужно хранить массив строк в памяти программ и выводить его на дисплей. Для этого подключена библиотека pgmspace.h
Для хранения массива строк, вначале, использовал объявление двумерного массива в виде

Код: Выделить всё

const char txt[3][9] PROGMEM = {"Text1","Text12","Text123"};
Тут размер массива выбирается по самому длинному тексту + символ конца строки.
Функция вывода этого текста выглядит так

Код: Выделить всё

void lcd_putsf(const char *string) {
	while (pgm_read_byte(string))
	{
		lcd_write(pgm_read_byte(string++));
	}
}
а ее вызов, соответственно

Код: Выделить всё

lcd_putsf(txt[0]);
выведет самый первый элемент.
Но такое размещение массива строк в памяти не экономично, так как величина массива определяется по самому большой текстовой строке. Я перерыл кучу справочников и "обучалок". Есть другой способ с экономией памяти.
Вначале создаются сами строки

Код: Выделить всё

const char txt1[] PROGMEM = "Text1";
const char txt2[] PROGMEM = "Text12";
const char txt3[] PROGMEM = "Text123";
Затем создается сам массив

Код: Выделить всё

const char* const txt[] PROGMEM = {txt1,txt2,txt3};
И вот тут полная лажа. Код компилируется без ошибок и предупреждений, но на дисплей выводится мусор. Да! При этом явно экономится память программ, вопросов нет. Пытался смотреть в симуляторе, но не понял до конца. В первом случае я вижу в памяти программ весь массив, во втором только значение txt[0]. Но я с симулятором сильно не дружу, могу и наврать.

Подскажите, где во втором способе создания массива ошибка, или ошибка в функции вывода?
Я пробовал убрать определитель PROGMEM из строчки

Код: Выделить всё

const char* const txt[] PROGMEM = {txt1,txt2,txt3};
приведя ее к виду

Код: Выделить всё

const char* const txt[] = {txt1,txt2,txt3};
Тогда моя функция работает, но резко вырастает объем потребляемой памяти данных.

Re: AVR studio в вопросах и ответах

Добавлено: Пт янв 24, 2020 14:52:01
ARV
если у вас современная студия, не майтесь этой ерундой PROGMEM, используйте префикс __flash const и работайте с указателями на строки, как с обычными указателями на строки в ОЗУ, без всяких функций pgm_read_XXX :)

Re: AVR studio в вопросах и ответах

Добавлено: Пт янв 24, 2020 15:15:26
serg_svd
Студия версии 7.0.1188. Буду разбираться. Спасибо за совет!

PS. А не работает почему-то __flash const/
AVR GCC версия 4.9.2
Он явно не знает определение __flash.

Re: AVR studio в вопросах и ответах

Добавлено: Пт янв 24, 2020 16:37:58
ARV
должен знать!

Re: AVR studio в вопросах и ответах

Добавлено: Пт янв 24, 2020 16:55:28
serg_svd
[uquote="ARV",url="/forum/viewtopic.php?p=3779352#p3779352"]должен знать![/uquote]
... если только какую библиотеку надо подключать... Но пока не знает и букварик по avr-gcc пока мало что прояснил для меня

Код: Выделить всё

const __flash char txt1[] = "Text1";
Или не так пишу?
Если верно, то как к ней обращаться?
&txt?

Разобрался. Неверно был массив определен с данным идентификатором
Надо так?

Код: Выделить всё

const __flash char* txt[] ={txt1,txt2,txt3}
Во всяком случае сейчас так работает, но опять начало отжирать память данных. А это признак того, что массив строк всеже пишется не туда

Re: AVR studio в вопросах и ответах

Добавлено: Пт янв 24, 2020 18:42:11
ARV
const __flash char * txt[] - это массив указателей во flash, а сами txt1, txt2 где? они ведь тоже во flash должны быть

Код: Выделить всё

const __flash char s1[] = "test1";
const __flash char s2[] = "test2";
const __flash char s3[] = "test3";

const __flash char* const __flash array[3] = {s1, s2, s3};
листинг

Код: Выделить всё

00000014 <array>:
  14:	26 00 20 00 1a 00                                   &. ...
0000001a <s3>:
  1a:	74 65 73 74 33 00                                   test3.
00000020 <s2>:
  20:	74 65 73 74 32 00                                   test2.
00000026 <s1>:
  26:	74 65 73 74 31 00                                   test1.

Re: AVR studio в вопросах и ответах

Добавлено: Пт янв 24, 2020 23:24:49
serg_svd
[uquote="ARV",url="/forum/viewtopic.php?p=3779414#p3779414"]const __flash char * txt[] - это массив указателей во flash, а сами txt1, txt2 где? они ведь тоже во flash должны быть

Код: Выделить всё

const __flash char s1[] = "test1";
const __flash char s2[] = "test2";
const __flash char s3[] = "test3";

const __flash char* const __flash array[3] = {s1, s2, s3};
[/uquote]
Ага! Опять тоже самое выходит, что с PROGMEM. Прям кругами хожу
Беру за аналогию Ваш пример. У меня было

Код: Выделить всё

const char s1[] PROGMEM = "test1";
const char s2[] PROGMEM = "test2";
const char s3[] PROGMEM = "test3";

const char* const array[3] PROGMEM = {s1, s2, s3};
То есть, по факту, убираем PROGMEM, но заменяем const на const __flash

Все компилируется, но, опять же, не работает.

ARV, детский вопрос, а как тогда адаптировать функцию, чтобы она работала с const __flash?
У меня было так

Код: Выделить всё

void lcd_putsf(const char *string) {
   while (pgm_read_byte(string))
   {
      lcd_write(pgm_read_byte(string++));
   }
}
Но данная функция выводит мусор, вместо значений в строковых переменных s1, s2, s3 , при вызове функции, к примеру

Код: Выделить всё

lcd_putsf(array[0]);

Re: AVR studio в вопросах и ответах

Добавлено: Сб янв 25, 2020 09:54:04
oleg110592
[uquote="serg_svd",url="/forum/viewtopic.php?p=3779538#p3779538"]вопрос, а как тогда адаптировать функцию, чтобы она работала с const __flash?[/uquote]
по мануалу похоже никак:
https://www.microchip.com/webdoc/avrlib ... _data.html
еще инструкция как как разместить строки и константы на flash:
http://microsin.net/programming/avr/avr ... ogmem.html

В XC8 compiler (поддерживает и PIC и AVR), начиная с версии 2.05 достаточно просто const для размещения в program memory. Но надо установить Mplab-x.
https://microchipdeveloper.com/xc8:xc8- ... ly-objects

Re: AVR studio в вопросах и ответах

Добавлено: Сб янв 25, 2020 19:44:23
ARV
serg_svd писал(а):Опять тоже самое выходит, что с PROGMEM
то же да не то же. чтобы считать байт из flash теперь надо просто написать flash_array вместо pgm_read_byte(&flash_array) - разница есть? а если использовать указатель const __flash char *ptr, то можно работать с указателем, как с любым иным - указывать он будет на байты во flash и извлекать оттуда без иных усилий.
serg_svd писал(а):а как тогда адаптировать функцию, чтобы она работала с const __flash?
элементарно

Код: Выделить всё

void lcd_putsf(const __flash char *string) {
   while (*string)
   {
      lcd_write(*string++);
   }
}
Добавлено after 1 hour 20 minutes 43 seconds:
oleg110592, вы дали советы об AVR, отставшие от реальности лет на 5, пожалуй. сегодня они уже не актуальны.

Re: AVR studio в вопросах и ответах

Добавлено: Сб янв 25, 2020 22:24:43
oleg110592
[uquote="ARV",url="/forum/viewtopic.php?p=3779895#p3779895"]отставшие от реальности лет на 5, пожалуй. сегодня они уже не актуальны.[/uquote]
речь была о
Студия версии 7.0.1188
см выше
Note: These toolchains are included when downloading Atmel Studio 7:
https://www.microchip.com/mplab/avr-sup ... -compilers
документация актуальная на данный момент к этому toolchain (AVR 8-bit Toolchain v3.62 9/28/2018) предоставлена самим производителем. И этому toolchain реально 2.2 года.
XC8 компилятор тоже самая свежая, рекомендуемая производителем, актуальная версия 2.10 8/14/2019 - тоже никак не 5 лет.

Re: AVR studio в вопросах и ответах

Добавлено: Сб янв 25, 2020 22:48:44
ARV
Да без разницы, какая там версия и какая официальная документация! Факт неопровержим: компилятор давно поддерживает то, о чем мало кто знает, и в "официальной документации" об этом нет ни слова. По-моему, со времён WinAvr эту документацию никто не правил.