Обсуждаем контроллеры компании Atmel.
Ответить

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

Вс янв 26, 2020 11:34:08

ARV писал(а):а еще есть __memx

Класс!!! :beer:
Я о такой и не знал. Раньше всегда две функции приходилось писать, чтобы выводить данные из flash и RAM

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

Вс янв 26, 2020 12:19:03

Суслик может и есть, но мне ехать, а не шашечки. Версию, с которой ездил успешно, я обозначил, и что-то доказывать ещё не намерен.

Продолжайте разглядывать сусликов.

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

Вс янв 26, 2020 13:22:00

Версию, с которой ездил успешно, я обозначил

версия от Атмел, которая в составе Atmel studio? (напомню тема тут: AVR studio в вопросах и ответах). У меня пару проектов было сделано в Atmel studio, глянул - было делано так:
Код:
volatile const uint8_t seg7[] PROGMEM =
{
   //'0' '1'    '2'   '3'  '4'   '5'   '6'   '7'   '8'   '9'   'L'   'H'   'P'   'E'   '-'   blank
   0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x38, 0x76, 0x73, 0x79, 0x40, 0x00
};
....
*(dispBuffer + 0) = pgm_read_byte(&seg7[(uint8_t)binc]);

конст __флэш тогда не смог осилить.
Потом была модификация где-то год назад - делал на линукс авргсс 9.0 - там работало так:
Код:
const uint8_t __flash seg7[] =
{
    //'0' '1'    '2'   '3'  '4'   '5'   '6'   '7'   '8'   '9'   'L'   'H'   'P'   'E'   '-'   blank
    0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x38, 0x76, 0x73, 0x79, 0x40, 0x00
};
*(dispBuffer + 0) = seg7[(uint8_t)binc];

Проверте пожалуйста, кто нибудь, последний код, в последней Atmel studio (неужто теперь заработало).

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

Вс янв 26, 2020 18:58:37

oleg110592 писал(а):Проверте пожалуйста

Я Ваш код не проверял, но подтверждаю, __flash и __memx действительно работают, как и подсказал ARV :beer:
PS. Меня до этого pgmspace.h не сильно напрягало, но с применением __flash код стал более читаем и его легче адаптировать с атмела на PIC. Меньше корректировать код.
Ну а с применением __memx вообще нет нужды дублировать функции только из-за того, что одна работает с ram, а другая с flash. Хотя может и раньше это можно было обойти, ноя не программист, пишу, как соображалки хватает

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

Вс янв 26, 2020 20:36:16

рокки1945, есть avr/wdt.h. А за магические цифры в коде хочется сильно ругаться.

пользуюсь начиная с avr-gcc 4.9.2 багрепорты не читал, проблем не замечал

а суслик есть :))) , даже в 2017г.:
https://www.avrfreaks.net/forum/use-mem ... code-issue

Ваш "суслик" не совсем багю Ниже если почитать, то в том МК нет просто отдельных инструкций LPM для загрузки из флэша. А адресное пространство флэша и ОЗУ там и так линейно. Поэтому такое и не работает. Там просто линкером надо секцию во флэш поместить и всё.

Проверте пожалуйста, кто нибудь, последний код, в последней Atmel studio (неужто теперь заработало).

Давно всё работает, что тут проверять-то. К тому же никто не мешает со студией использовать любой тулчейн. Я без проблем подключал туда avr-gcc 9.0. Актуальные сборки avr-gcc есть тут если что: https://blog.zakkemble.net/avr-gcc-builds/

Но как быть с библиотечными функциями типа strlen_P(const char *s);? Чем их заменить то?

На те же функции без суффикса _P. Компилятор сам всё сделает.
А XC8 сам по себе платный. В бесплатной версии он выдает очень плохой код. Для AVR его использовать не вижу смысла. Это с PIC он необходимое зло получается.

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

Вс янв 26, 2020 21:01:46

NStorm писал(а):На те же функции без суффикса _P. Компилятор сам всё сделает.
вы уверены?

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

Вс янв 26, 2020 22:09:37

Ваш "суслик" не совсем багю

Да проверил на древней AVR Studio 4.19 - установил последний тулчейн с родного сайта. Ура - на меге48 конст __флэш заработало. Там, правда теперь gcc 5.4.0. Но на тини10 по прежнему деготь в бочке меда. Тини10 использую регулярно.
Код:
avr-gcc  -mmcu=attiny10 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT TestConst.o -MF dep/TestConst.o.d  -c  ../TestConst.c
\Temp\ccylzL9l.s: Assembler messages:
\Temp\ccylzL9l.s:31: Error: illegal opcode elpm for mcu avrtiny
Makefile:48: recipe for target 'TestConst.o' failed
make: *** [TestConst.o] Error 1
Build failed with 1 errors and 1 warnings...

Вот инструкция как использовать AVR Attiny10 with Atmel Studio 7 and Atmel ICE
https://electronut.in/attiny10-hello/
По стариночке понадежнее будет:
Код:
const unsigned char green[] PROGMEM = {255, 0, 127, 0, 255};
rgb[1] = pgm_read_byte(&green[colorIndex]);

итог: в топку const __flash и __memx иже с ним (мое имхо)
з.ы. "Там просто линкером надо секцию..." "Я без проблем подключал туда avr-gcc 9.0..." - не для новичков

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

Вс янв 26, 2020 22:40:42

NStorm писал(а):На те же функции без суффикса _P. Компилятор сам всё сделает.
вы уверены?

Ну а как еще? Функции с суффиксом _P работают с переменными с атрибутом PROGMEM. Они соб-но используют ф-ии pgm_* для загрузки данных. А т.к. с атрибутом __flash мы работаем с переменной как с обычной константой с любыми функциями, то и подобные функции также нужны обычные. Тут уже компилятор при обращении к переменным __flash должен знать как их обработать.
Надо будет проверить.

Добавлено after 20 minutes 19 seconds:
oleg110592, в топку PROGMEM, потому что устарело. Как и 4ая студия - мамонт. Тулчейн вы обновили, а avr-libc? У меня нет такой проблемы, собирается под т10 без проблем с const __flash. Более того, у меня например нет ф-ии strlen_P для PROGMEM под т10:
Код:
/tmp/ccX6CWPS.o: In function `strlen_P':
/home/nstorm/avr8-gnu-toolchain-linux_x86_64/avr/include/avr/pgmspace.h:1782: undefined reference to `__strlen_P'

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

Вс янв 26, 2020 22:48:37

Ну конечно, а почему нет? Функции с суффиксом _P работают с переменными с атрибутом PROGMEM. Они соб-но используют ф-ии pgm_* для загрузки данных. А т.к. с атрибутом __flash мы работаем с переменной как с обычной константой с любыми функциями, то и подобные функции также нужны обычные. Тут уже компилятор при обращении к переменным в любом месте сам знает, что надо вызывать LPM/ELPM.

Попробовал я заменить strlen_P на просто strlen. Компилятор не ругается, но длина строки не вычисляется.

ARV, вопрос к Вам. Почему у меня студия не знает __flash в редакторе? В списке подсказок такого нет. Хотя и работает все.
И выдает свежее при этом Warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]

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

Вс янв 26, 2020 22:55:34

__flash это не стандартное ключевое слово, потому студия и не подсвечивает. вероятно, и навигация по типам и переменным тоже сбивается... в Eclipse я знаю, как с этим бороться (костыль), что делать в студии - не знаю.

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

Вс янв 26, 2020 22:56:18

PROGMEM, потому что устарело. Как и 4ая студия - мамонт

AVR тоже мамонт - мамонту мамонтово :)
Тулчейн вы обновили, а avr-libc?

ставил на свежую девственную вин10 последних версий, правда хоум. Там нечего обновлять - студия и чистый Атмел тулчейн со своим же родным avr-libc. 7 студию ставить не хочу - она засирает конкретно систему, лучше уж вижуал студия 2012 с VisualGDB, но там свой тулчейн

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

Пн янв 27, 2020 09:44:17

Новый avr-gcc 9.2.0 уже вполне себе ругается при попытке собрать __flash под t10:
Код:
t10.c:7:12: error: address spaces are not supported for reduced Tiny devices
    7 | const char __flash test2[] = "TEST2";
      |            ^~~~~~~

Как объясняют на avrfreaks, т.к. в reduced core тиньках адресное простанство линейно, нет нужды использовать __flash или PROGMEM. Можно просто юзать const. Инструкция LD вполне себе оттуда данные загрузит. Проверил:
Код:
#include <stdio.h>
#include <string.h>
#include <avr/io.h>

const char test2[] = "TEST2...123";

int main() {
  volatile char test4[12]; // локальная переменная, чтобы не в bss секцию попало
  strcpy(test4, test2);
  DDRB = test4[1]; / / Просто чтобы проверить.

  while (1) { }
}

avr-gcc -mmcu=attiny10 -Og -g -o t10.elf t10.c && avr-objdump -S -D t10.elf > t10.lst && avr-size -C --mcu=attiny10 t10.elf выхлоп:
Код:
AVR Memory Usage
----------
Device: attiny10

Program:      98 bytes (9.6% Full)
(.text + .data + .bootloader)

Data:          0 bytes (0.0% Full)
(.data + .bss + .noinit)

Код:
...
  strcpy(test4, test2);
  3a:   4c e0           ldi     r20, 0x0C       ; 12
  3c:   e2 e6           ldi     r30, 0x62       ; 98
  3e:   f0 e4           ldi     r31, 0x40       ; 64
  40:   bd 2f           mov     r27, r29
  42:   ac 2f           mov     r26, r28
  44:   af 5f           subi    r26, 0xFF       ; 255
  46:   bf 4f           sbci    r27, 0xFF       ; 255
  48:   01 91           ld      r16, Z+
  4a:   0d 93           st      X+, r16
  4c:   4a 95           dec     r20
  4e:   e1 f7           brne    .-8             ; 0x48 <__SREG__+0x9>
  DDRB = test4[1];
  50:   ce 5f           subi    r28, 0xFE       ; 254
  52:   df 4f           sbci    r29, 0xFF       ; 255
  54:   48 81           ld      r20, Y
  56:   c2 50           subi    r28, 0x02       ; 2
  58:   d0 40           sbci    r29, 0x00       ; 0
  5a:   41 b9           out     0x01, r20       ; 1

...

Disassembly of section .rodata:

00004062 <test2>:
const char test2[] = "TEST2...123";
    4062:       54 45           sbci    r21, 0x54       ; 84
    4064:       53 54           subi    r21, 0x43       ; 67
    4066:       32 2e           mov     r3, r18
    4068:       2e 2e           mov     r2, r30
    406a:       31 32           cpi     r19, 0x21       ; 33
    406c:       33 00           .word   0x0033  ; ????
...

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

Пн янв 27, 2020 10:41:34

Проблема решена.
проверил xc8 - чистый const спокойно кушает и для мега48 и для тини10. Там обычный такой же тулчейн avrgcc 5.4.0. - все сразу из коробки, без доп. мучений. Листинг похоже вполне нормальный. Оптимизацию -Os поволяет. Ждет аврщиков дорога Migrating to MPLAB® X IDE from Atmel Studio IDE
https://microchipdeveloper.com/mplabx:m ... n-atstudio
coming soon :music:
Изображение

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

Пн янв 27, 2020 11:08:00

имхо, AVR-щиков дорога должна ждать в сторону Eclipse. хотя, конечно, тем, кто без аппаратного отладчика и байт не обнулит, Eclipse будет не по душе...

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

Пн янв 27, 2020 12:04:23

проверил xc8 - чистый const спокойно кушает и для мега48 и для тини10. Там обычный такой же тулчейн avrgcc 5.4.0. - все сразу из коробки, без доп. мучений. Листинг похоже вполне нормальный. Оптимизацию -Os поволяет. Ждет аврщиков

Вы путаете компилятор и среду. XC8 - отдельный проприетарный компилятор. Или avr-gcc, или XC8 - это два разных компилятора. А то, что у вас на скрине - среда MPLAB X IDE.

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

Пн янв 27, 2020 12:29:19

Или avr-gcc, или XC8 - это два разных компилятора

производитель пишет - это один компилятор
Выпуск MPLAB XC8 v2.05 расширил поддержку AVR, объединив многие новые функции компилятора AVR, и вместе с новейшей MPLAB X IDE этот компилятор позволяет программистам разрабатывать код для любого 8-разрядного устройства Microchip.

https://microchipdeveloper.com/xc8:avr-in-xc8
Да и какая разница - установка проста, все сразу из одного экзешника. Мплаб Х легко подхватывает и даже после установки сам предлагает качнуть. Удобство для начинающих. Можно использовать и в другом редакторе иль иде, хоть в эклипсе.

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

Пн янв 27, 2020 12:38:55

производитель пишет - это один компилятор

В каком месте они такое пишут? Не выдумывайте. Это два разных компилятора.

Да и какая разница

Разница огромная. Это два разных компилятора. К MPLAB X прикручиваются нативно оба. Но отличия в коде будут существенными.

И я прекрасно знаю, что со 2ой версии XC8 добавили поддержку AVR, только это не делает его avr-gcc еще. GCC - совсем другой компилятор. А XC8 вообще-то проприетраный и платный, в бесплатной версии имеющим многие ограничения, во всяком случае для PICов.

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

Пн янв 27, 2020 12:59:05

в бесплатной версии имеющим многие ограничения, во всяком случае для PICов.

мы ж в теме авр - пока ограничений авр не увидел, да и для пиков там только режим PRO отключен, несмертельно - можно забить, купить, древняя ломака еще работает.

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

Чт фев 06, 2020 10:49:29

помогите скомпилировать исходник bootloader`a под 328p мегу


Вот что выдает Студия:
Код:
Size before:
      0 [main] sh 7668 sync_with_child: child 8008(0x19C) died before initialization with status code 0xC0000142
  56762 [main] sh 7668 sync_with_child: *** child state waiting for longjmp
/usr/bin/sh: fork: Resource temporarily unavailable
make: *** [sizebefore] Îøèáêà 128
Build failed with 1 errors and 0 warnings...

студия 4.19
мейк подключен
AVR Toolchain 3.3.0.710-win32 подтянут

интересные строчки из main.c:
Код:
 AVRPROG compatible boot-loader
* Version  : 0.85 (Dec. 2008)
* Compiler : avr-gcc 4.1.2 / avr-libc 1.4.6
Вложения
Исходник_скомпилировать.zip
(61.93 KiB) Скачиваний: 350

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

Чт фев 06, 2020 13:28:30

koulja, вангую, что из-за кириллических имен в пути. Попробуйте без этого.
Хотя нафига там студия, когда там есть makefile и прекрасно им собиратеся. Вот под мегу8 (т.к. конф только к ней приложен был):
Ответить