Перейти к содержанию
    

demiurg1978

Участник
  • Постов

    349
  • Зарегистрирован

  • Посещение

Репутация

1 Обычный

Информация о demiurg1978

  • Звание
    Местный
    Местный

Информация

  • Город
    Array

Посетители профиля

3 099 просмотров профиля
  1. Привет. Как бы все правильно. Работа с периферией. Указатель двухбайтный и обращение должно полным.
  2. Слушайте. Вы сделали неверные выводы. Сказал же. AVR занимаюсь с 2007 года. И работу с EEPROM примерно тогда и освоил. Мне касаемо архитектуры и внутренней периферии ваши советы не нужны. Сам могу давать советы. Мой вопрос был насчёт компилятора. Мы поняли друг друга?
  3. Я в IAR использовал переменные EEPROM как есть. Потому и получил гранату. __eeprom u08 ee_parameter_1; ee_parameter_1 = 0x55; Именно в моем случае решение проблемы использовать функции read_eeprom_byte (). write_eeprom_byte (). Ну и соответственно нужная разрядность. u08, u16, u32. Либо самописные функции. В соответствии с даташитами.
  4. Я всегда пользовался студией. Самая адекватная и стабильная это 4.19. Проекты пишу на IAR. Симуляцию делаю в AVR-Studio. Нужную периферию проверяю уже на железе. Если требуется с осциллографом. Знаю как работает МК. Знаю как должна работать программа. Знаю как должна работать периферия. Если требуется, пишу тестовые куски кода. Написал этап работы, прогнал в симуляторе. Потом в железе. Итог. Практически всегда уже пишу так, что работает сразу. За редким исключением. Microchip Studio это наследие AVR-Studio. Со всеми ее недостатками. Мой профессиональный багаж. Электронные устройства, блоки управления станками, промышленного оборудования.
  5. Теперь увидел. В последнее время режим как попало. Прихожу поздно, часто ночами сижу. Пардон. Сразу ваш тот ответ не увидел. Тему читал уставший и невыспавшийся. Сергей Борщ и Точка Опоры меня хорошо знают. Толику знаний и от них получил. AVR-ками занимаюсь с 2007 года. Несколько лет на асме. Потом си. Я выше уже написал. Тему невнимательно прочитал. Думал, где то упустил ответ, почему компилятор сделал неправильно запись в EEPROM.
  6. Вы меня знаете. AVR-ки хорошо знаю. Сказал же, написал тестовую программу на асме. Я хотел посмотреть ответ Сергея.
  7. Приветствую всех! Сталкивался с подобной ситуацией. Компилятор IAR. Микроконтроллер ATMEGA32. Проект на си. Прибор, матричная клавиатура, символьный дисплей. Меню, параметры. Программа работает, при вводе параметров и попытке сохранить в EEPROM данные не сохраняются. В дизасм смотрел, вроде все нормально. Делаю в AVR-Studio тестовый проект на ассемблере. Все сохраняется. Я тогда торопился, нужно было срочно добить проект. Точно не помню, то ли замена на ATMEGA32A мне тогда помогла, то ли версию IAR сменил. Что там за тема про 4 такта? Можно ссылочку?
  8. case KEY_ENTER_COD: if (CurrMenuItem -> EnterFunc != NULL_FUNC) { GO_MENU_FUNC (ENTER_FUNC); a = true; } if (SET_MENU_LEVEL (CHILD)) a = true; break; void Callback_Func (void) { SET_MENU_LEVEL (KAKOE_TO_MENU); } В этом случае будет рекурсия. Скажу честно, не разбирался с этой особенностью. Просто учитываю этот нюанс.
  9. Речь не об уровнях меню. Уровней меню может быть сколько угодно. Главное - памяти чтобы хватило. Речь о входе в MicroMenu. Вход должен быть только один. Зашли, вышли. Если в callback будет ещё один вход, программа зациклится. Пример. Пусть мы зашли по CHILD, в callback будет ещё один вход по PARENT, CHILD, NEXT, PREV. Программа зациклится. Будет постоянный переход по указанному макросу.
  10. В очередной раз убеждаюсь, что на данный момент лучше MicroMenu пока ничего нет. Но, нужно аккуратно работать. Так как указатели на указатели на указатели. Я когда начал разбираться, да ещё тогда на асме писал, мой моск чуть не взорвался. Держать у уме все это. После этого я перешёл на си. Стало проще. Более объектно стало. В MicroMenu можно использовать только один слой. Если слой будет завернут ещё в один слой, случится бесконечная рекурсия. То есть. При использовании нужно заходить в MicroMenu 1 раз. Если в callback будет ещё один вход, программа зациклится.
  11. Ааааа!!! Посыпаю голову пеплом! Банальный и беспощадный копипаст! В обработчиках кодов кнопок NEXT и PREV у PREV стоял параметр функции NEXT. Епрст. Еклмн. Гребаный стыд и позор! Вычислил по тестовому отображению адресов таблицы MicroMenu. Нажимая на кнопки поочерёдно NEXT и PREV адреса устанавливались при PREV как при NEXT. Полез разбираться и увидел. Матерился долго и смачно. Полночи вчерашнюю убил на разбирательство. Исправил. Всё чётко работает. И синхронизацию процессов заодно поправил. Благодарю за внимание, прастыте, что отвлек, побеспокоил. 🙂
  12. Что то не так. Продолжаю разбираться....
  13. Отчёт. У меня используются в этих блоках управления ионисторы. Алгоритм работы: при подаче питания считываются параметры из EEPROM SRAM. На питании 24 вольта стоит оптрон. Когда питание сняли, за счёт ёмкостей блока питания мк успевает определить, что снято питание 24 V, переходит в урезанный цикл, и за счёт ионистора перегоняет все параметры в EEPROM. Из за ионистора и пониженного напряжения фьюзы BODEN нужно выставить 2,7 вольта. Проверил. Есть. Заменил МК на ATMEGA8535. Такая же картина. Перенастроил сторожевой на 2 с. Мало ли, вдруг где то зациклился. Хотя не вариант. Точно этого не может быть. Системный тик 1 мс. Но мало ли. Не помогло. Урезал проект до минимума. Не помогло. И тут я понял. Рассинхронизация программных модулей. Ведь по кнопке ESC возврат в исходное происходит исправно. И по нажатию ENTER заходит. Рассинхронизация навигации по меню и Blink пунктов меню. С MicroMenu я сделал общую функцию опроса кодов кнопок и действий. И эта функция работает поверх КА меню. А если Switch-case, то это в нужных состояниях. И потому со Switch-case все работало. А эта функция работает поверх и совершает нужные действия насильно.
  14. Все что может меняться, я вывел на дисплей. Коды кнопок и все остальное выводится в требуемом состоянии конечного автомата. Все выводимые переменные показывают корректные данные. Возможно, что то упустил. Сегодня буду дальше ковырять. Аппаратных средств отладки мк на данный момент нет. Всё эти годы все косяки и ошибки выявлял в симуляторе AVR Studio, текстовыми кусками кода. Окончательный прогон на железе. Повторяю. На Switch-case все работает идеально. Но это увеличение, разбухания кода. Есть одна мысль. Тогда, 2013 году, когда писал проект, выяснилось, что IAR некорректно выдал выхлоп на запись EEPROM у ATMEGA32, 32A. ATMEGA8535 нормально. Возможно, здесь и сейчас есть та же проблема. Проверю, отпишусь. Сергей Борщ, приветствую! Рад видеть в обсуждении.
×
×
  • Создать...