Например TDA7294

Форум РадиоКот • Просмотр темы - AVR-GCC. Не читает массив[] сиволов.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб июл 26, 2025 04:32:57

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 41 ]  1, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Вс апр 06, 2025 22:43:43 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 242
Рейтинг сообщения: 0
Пытаюсь прочитать символы из массива и вывести в PORTA, но че-то не получается. Выводится белиберда.
Написал вот такое:
Код:
#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>

const unsigned char pattern[] PROGMEM =  {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01};

void setup() {
DDRA = 0xFF;
Serial.begin(9600);
}

int main() {
  setup();
   while(1) {
      unsigned int i;
      for(i = 0; i <= sizeof(pattern); i++) {
         PORTA = pattern[i];
      debug(i, pattern[i]);
         _delay_ms(100);
      }
   }
}

int debug(int index, unsigned char table) {
      Serial.print("i = ");
      Serial.print(index);
      Serial.print("; ");
      Serial.print("pattern[i] = ");
      Serial.print(table, HEX);
      Serial.print("\n");
      }


Писал под атмегу16а, перенес на ардуину чтоб можно дебажить. Там поведение не отличается.
В последовательный порт пишет такое:

Код:
i = 0; pattern[i] = 0
i = 1; pattern[i] = 0
i = 2; pattern[i] = 0
i = 3; pattern[i] = 0
i = 4; pattern[i] = 0
i = 5; pattern[i] = 0
i = 6; pattern[i] = 0
i = 7; pattern[i] = 0
i = 8; pattern[i] = B8
i = 9; pattern[i] = B8
i = 10; pattern[i] = B8
i = 11; pattern[i] = B8
i = 12; pattern[i] = 0
i = 13; pattern[i] = B8
i = 14; pattern[i] = B8
i = 15; pattern[i] = B8
i = 16; pattern[i] = B8


Если в pattern[] индексы расставить вручную - [0...16], то все работает. Через переменную i - никак.
Наверное что-то делаю не так, но что не понимаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Вс апр 06, 2025 22:55:18 
Опытный кот

Зарегистрирован: Вс мар 23, 2025 14:56:55
Сообщений: 700
Рейтинг сообщения: 0
Код:
  for(unsigned int i = 0; i < sizeof(pattern); i++) {  //нельзя <= !
    PORTA = pgm_read_byte(&pattern[i]); // https://alexgyver.ru/lessons/progmem/
    debug(i, PORTA);
    _delay_ms(100);
  }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Вс апр 06, 2025 23:32:48 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вс окт 20, 2019 13:03:56
Сообщений: 242
Рейтинг сообщения: 0
Спасибо!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Пт апр 11, 2025 21:46:39 
Мучитель микросхем
Аватар пользователя

Карма: 10
Рейтинг сообщений: 155
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 469
Рейтинг сообщения: 1
Shuspano, либо объявить массив вот так:
Код:
const __flash unsigned char pattern[] =  {0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01};

Тогда вот такая конструкция
Код:
PORTA = pattern[i];
работает

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 09:01:03 
Это не хвост, это антенна
Аватар пользователя

Карма: 6
Рейтинг сообщений: 83
Зарегистрирован: Ср сен 03, 2008 21:42:17
Сообщений: 1350
Откуда: Ленинградская область,пос.Красный Остров
Рейтинг сообщения: 0
У микроконтроллеров память устроена не так как у обычных компов. У них память flash где хранится программа и память ram где она манипулирует данными в процессе работы - это разные области памяти,каждая со своими адресами. GCC делался исходно для компов поэтому сам по себе с такой организацией памяти работать не умеет. Ему нужно принудительно говорить где находится массив и как к нему обращаться.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 09:06:17 
Мучитель микросхем
Аватар пользователя

Карма: 10
Рейтинг сообщений: 155
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 469
Рейтинг сообщения: 0
WatchCat, уточню - у AVR-ок старого разлива. У новых микрощиповских там уже все области отражаются на единое адресное пространство и можно вроде как без извратов с прогмемом читать.
А есть микроконтроллеры других производителей, где изначально все адресное пространство едино и доступно. Флеш, периферия, ОЗУ - все в нем.

_________________
Белая и Пушистая


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 10:54:51 
Это не хвост, это антенна
Аватар пользователя

Карма: 6
Рейтинг сообщений: 83
Зарегистрирован: Ср сен 03, 2008 21:42:17
Сообщений: 1350
Откуда: Ленинградская область,пос.Красный Остров
Рейтинг сообщения: 0
Just_Fluffy, Естественно я говорю о классических AVR, тех что легко доступны в виде готовых плат-модулей из Китая,которые можно впаять в свою конструкцию.
Типа например вот таких,на которых распаяна Atmega328p
Вложение:
26d1050ae40cc2e3f95ec3fec7fd1894.jpg [44.42 KiB]
Скачиваний: 56


Цитата:
А есть микроконтроллеры других производителей, где изначально все адресное пространство едино и доступно.

Когда под них будет доступен симулятор,сравнимый с VMLAB - https://mega-avr.ru/vmlab-3-5/
тогда они и станут актуальны и удобны для радиолюбителей. Потому что для любителя самое важное это наглядность процесса отладки,позволяющая видеть как его программа работает в контроллере.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 12:07:23 
Мучитель микросхем
Аватар пользователя

Карма: 10
Рейтинг сообщений: 155
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 469
Рейтинг сообщения: 1
WatchCat, у СТМок прекрасная отладка прямо в железе через свисток за полтора бакса. Просто порог вхождения несколько выше, особенно после АВРок. А так - СТМка очень удобная в плане периферии и производительности.

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 13:11:29 
Это не хвост, это антенна
Аватар пользователя

Карма: 6
Рейтинг сообщений: 83
Зарегистрирован: Ср сен 03, 2008 21:42:17
Сообщений: 1350
Откуда: Ленинградская область,пос.Красный Остров
Рейтинг сообщения: 0
Just_Fluffy, Я не про отладку в железе говорил,а про программный симулятор, в частности кроме прочего вылавливающий ошибки при работе с периферией,как это делает vmlab. Если интересно - можете или сами пощупать vmlab или почитать статьи про него чтобы было понятно что любителю требуется.

Вполне допускаю,что профессионалу который ежедневно по восемь часов в день пишет и отлаживает код для микроконтроллеров - vmlab не нужен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 13:17:33 
Опытный кот

Зарегистрирован: Вс мар 23, 2025 14:56:55
Сообщений: 700
Рейтинг сообщения: 0
А непрофессионалу он тем более не нужен, ибо таким же инструментом является готовая "железяка", но притом она обладает огромным преимуществом: реальностью.
Ошибок с симуляторами вагон и тележка. Воплей "в симуляторе работает, в изделии не работает" - море. Предлагаете непрофессионалу отличать ошибки программы от ошибок симулятора?
Симулятор микроконтроллеров необходим только в специфичных случаях: у меня нет "железяки", и нет времени её ждать, например, заказчик удалённый требует софт. Вот тогда из двух зол выбирается меньшее.
И как симулятор отлавливает ошибки в периферии - непонятно. У меня вот была ошибка в периферии - умудрился включить две альтернативных функции на один выход и просадил питание. Отловит подобное симулятор?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 14:30:05 
Это не хвост, это антенна
Аватар пользователя

Карма: 6
Рейтинг сообщений: 83
Зарегистрирован: Ср сен 03, 2008 21:42:17
Сообщений: 1350
Откуда: Ленинградская область,пос.Красный Остров
Рейтинг сообщения: 0
А непрофессионалу он тем более не нужен

Говорю вам как не профессионал - симулятор нужен.

Цитата:
Предлагаете непрофессионалу отличать ошибки программы от ошибок симулятора?

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

Цитата:
Симулятор микроконтроллеров необходим только в специфичных случаях

Я за последние два десятка лет столько всего отладил с помощью vmlab что не представляю как без него обходиться.
Зато почти всегда после vmlab код в контроллере работает как задумывалось,ну или требует минимального допиливания.

Цитата:
И как симулятор отлавливает ошибки в периферии - непонятно.

Он показывает ее состояние и симулирует ее действия. Не скажу что абсолютно все ошибки так ловятся,но явное большинство. То делитель не тот,то прерывание забыл разрешить или разрешил но не то,то не тот бит из регистра состояния проверял, то еще какие-нибудь такие мелкие но от этого не менее "бесячие" ляпы.
Понятно что профи,который наизусть помнит биты в регистрах потому что каждый день с ними дело имеет - в таких костылях не нуждается и таких глупых ошибок не допускает. Но стоит месяц не брать в руки компилятор как тонкости забываются и вспомнить их проще всего обкатывая код на симуляторе.

Не спорю,бывают случаи когда ошибка более высокого уровня чем перепутанные биты. Вот например состояния и переходы конечного автомата отлаживать - как? Всё равно нужно иметь возможность "ходить шагами" по программе и подставлять ей всякие значения,якобы читаемые из периферии. Как при "железной" отладке подсунуть нужные данные,пришедшие к примеру по i2c? Оно же из реального i2c читать будет.
(ну нравится мне использовать конечные автоматы:)

Цитата:
У меня вот была ошибка в периферии - умудрился включить две альтернативных функции на один выход и просадил питание. Отловит подобное симулятор?

Это явно не про Атмегу,на ней такое сделать затруднительно. Поэтому не могу сказать конкретно про vmlab. А вообще чисто теоретически симулятор такое проверять может,не допуская включения двух функций на один выход.

Кстати, раз уж вы там выше порекламировали железную отладку на STM то тогда к вам и вопрос - возможна ли она на вот таких китайских модулях:
https://robototehnika.ru/upload/iblock/ ... -pill.jpeg
И если да то что для этого надо? Да, я читал про железную отладку на старших STM,плата с которыми стоит несколько тысяч рублей.
Но интересует естественно этот,как самый распространенный и дешевый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 14:36:07 
Опытный кот

Зарегистрирован: Вс мар 23, 2025 14:56:55
Сообщений: 700
Рейтинг сообщения: 0
Сложно называть себя любителем после десятка лет ;)
Хорошо, я соглашусь на субъективность: кому-то нравится и нужен, кому-то не нужен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 14:52:21 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6039
Откуда: Minsk
Рейтинг сообщения: 0
Воплей "в симуляторе работает, в изделии не работает" - море.

Так симулятор симулятору рознь. Воплей такого рода много в отношении Протеуса, который берётся за симуляцию не только МК, но и всего содержащего МК устройства. А вот насчёт фирменных симуляторов - за долгую работу с АВР я лишь раз столкнулся с неправильной (не помню точно) установкой флагов в очередной версии Студии. Но и то они быстро исправили.
Как по мне: симулятор - отличная вещь и здорово помогает при разработке.

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 15:18:40 
Опытный кот

Зарегистрирован: Вс мар 23, 2025 14:56:55
Сообщений: 700
Рейтинг сообщения: 0
Ну, тогда бы я предпочёл бы именно протеус, потому что симулирование голого контроллера вообще не особо понимаю, зачем. Ну, просимулировал я, например, работу интерфейса I2C, отлично, ошибок нет. Перехожу в реальность и ничего не работает. А почему? А потому может быть мильёном причин, но главная из которых - а симулятору пофиг, что там на шине, а также как я выстроил событийность в протоколе I2C.
Собрать макетную плату - дело пары часов. Ну, ладно, пары выходных вечеров.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 15:38:57 
Это не хвост, это антенна
Аватар пользователя

Карма: 6
Рейтинг сообщений: 83
Зарегистрирован: Ср сен 03, 2008 21:42:17
Сообщений: 1350
Откуда: Ленинградская область,пос.Красный Остров
Рейтинг сообщения: 0
Сложно называть себя любителем после десятка лет

А почему,собственно? Если есть радиолюбители,которые паяют передатчики и стучат морзянкой в эфире то почему не
может быть программиста-любителя,паяющего поделки на микроконтроллерах? При том что я уже 15 лет программистом не работаю(живу на пассивный доход),следовательно профессионалом считаться не могу.

Цитата:
Хорошо, я соглашусь на субъективность: кому-то нравится и нужен, кому-то не нужен.

Так я именно об этом и говорил - тому,кто пишет программный код каждый день по 8 часов симулятор почти не нужен,ну может только в каких-то особо специальных случаях. А тому,что занимается программированием как хобби - симулятор очень даже нужен.

Добавлено after 9 minutes 30 seconds:
Ну, тогда бы я предпочёл бы именно протеус, потому что симулирование голого контроллера вообще не особо понимаю, зачем.

Конечно было бы хорошо если бы можно было симулировать сразу целое устройство. Но симуляция аналоговых цепей намного сложнее чем цифровых, и существенно менее точная потому что используются "идеализированные" компоненты. Потому и получается "в протеусе работает,а на плате не хочет".
На мой взгляд практически идеальный баланс между симуляцией голого контроллера и целого устройства имеет место быть именно в VMLAB. Как раз "золотая середина".
Вот я хотел бы тоже самое но для китайских контроллеров risc-v. Ну а пока нету - использую Атмеги и vmlab.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 16:06:19 
Опытный кот

Зарегистрирован: Вс мар 23, 2025 14:56:55
Сообщений: 700
Рейтинг сообщения: 0
WatchCat писал(а):
профессионалом считаться не могу
не, профессионализм не пропьёшь. Можно потерять актуальность, перестав следить за новым, можно делать гораздо дольше, чем обычно или что-то забыть с возрастом и ослаблением головы... но это всё контролируется. Опыт никуда не денется. Так что, принимается "профессионал в отставке", но деградация обратно до любителя - никогда ;)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 21:04:41 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6039
Откуда: Minsk
Рейтинг сообщения: 0
Ну, просимулировал я, например, работу интерфейса I2C, отлично, ошибок нет. Перехожу в реальность и ничего не работает.

Работу с периферией я всегда проводил на реальном железе. А вот отладка алгоритмов... Довелось делать довольно сложные устройства, писалось на асме (причины не станем выяснять, так было надо заказчику). Так там никаких, естественно, библиотек, как в Си . Пришлось писать и отлаживать плавучку, функции. Без симулятора бы - полный кирдаускас.
Давно, ещё в прошлом тысячелетии :))

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Сб апр 12, 2025 21:34:50 
Мучитель микросхем
Аватар пользователя

Карма: 10
Рейтинг сообщений: 155
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 469
Рейтинг сообщения: 0
Jack_A, так такое можно и прямо в студии отлаживать.
А вообще - АВРки - простые камни, дубовые и надежные.
Я тоже не профессионал, электроника и програминг - хобби.... Кормит меня PLSQL и бухгалтерия

_________________
Белая и Пушистая


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Вс апр 13, 2025 11:57:28 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6039
Откуда: Minsk
Рейтинг сообщения: 0
Jack_A, так такое можно и прямо в студии отлаживать.

...что я и делал. :)) Студия = редактор + компилятор + симулятор. О как :)
Разве спор идёт об ненужности вообще любых симуляторов - или только внешних по отношению к среде разработки?

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR-GCC. Не читает массив[] сиволов.
СообщениеДобавлено: Вс апр 13, 2025 13:17:18 
Мучитель микросхем
Аватар пользователя

Карма: 10
Рейтинг сообщений: 155
Зарегистрирован: Ср июн 29, 2022 16:25:45
Сообщений: 469
Рейтинг сообщения: 0
Jack_A, А мы про что то спорим?
Кто то начал делить посетителей на любителей и профессионалов... кто то - доказывать обязательную необходимость софтовой отладки...
Сколько людей, столько и мнений...
Я сейчас именно софтовой отладкой пользуюсь очень редко.... Поскольку в основном отладка нужна не текста программы, а взаимодействия с периферией.
А алгоритмы - ну, у меня любовь к программированию длится более 30 лет, начиная с калькулятора МК61.
АВР изучала, начиная с ассемблера, но когда разобралась в работе периферии, перешла на си, так проще. И разработка быстрее, и низкоуровневую организацию программы компилятор берет на себя. Для АВРок иногда пишу ассемблерные вставки. Но обычно лично мне хватает отладки в железе + логический анализатор и/или осциллограф.

_________________
Белая и Пушистая


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  1, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y