Х.З. меня кодевиженовская работа с ЕЕПРОМ устраивает в 90% задач единственное - после работы с ЕЕПРОМ я указатель убраю с занятой области ЕЕПРОМ, т.к. у тех, кто повторял мои поделки случались повреждения данных в ЕЕПРОМ... ну, и браундетектор включаю. остальные 10% - нестандартное использование, например постепенное сбрасывание битов для увеличения ресурса памяти счетчика наработки (8 событий записали - 1 раз стёрли) или 24 битные переменные...
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
а нам нужна универсальная программа работы с ЕЕПРОМ... под любую IDE... от голого МК до Ардуины. чтоб по 100 раз не переделывать. а универсальная программа - это когда мы работаем напрямую с регистрами МК.
далее... только есть проблемка... у нас две переменные типа int да ещё и со знаком... int c=0; int d=0; поэтому будут записываться в епром только половинка наших переменных )) а что делать ? ну самое простое изменить тип переменных... будут char и без знака... ))
фига-се... для каждой переменной свой набор функций... можно ведь указатели применить, и как-его (забыл как называется) - пишешь 2 функции - одну под инт переменную, вторую под чар и в зависимости от подсунутого компилятор сам нужную вызовет. ну, на крайняк в имени функции намекнуть с чем она работает... а про знковость вообще не понял - тут ни сравнения нет ни вообще математики... этим функциям должно быть по барабану содержимое обрабатываемых переменных
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Не нужны там разные переменные в именах функций... Не нужны там указатели... и т.д. Потому что нормальные люди пишут сразу массив с контролем целостности. Но как я уже говорил выше... у нас не совсем обычная программа. Так сразу не поймешь)) Ты дальше ещё не видел... что там в main творится)) Магия))
можно ведь указатели применить, и как-его (забыл как называется) - пишешь 2 функции - одну под инт переменную, вторую под чар и в зависимости от подсунутого компилятор сам нужную вызовет.
Такое только в ООП работает. А тут хотят чтобы везде собиралось. Я бы действительно применил указатель и размер. Типа write_eep( &t, sizeof( t ) ) и всё. Хотя, надо бы ещё и адрес в EEPROM передавать.
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 1 сентября 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Первое что стоит поменять, это выкинуть гото, наверное будет достаточно переместить нижний while(1) на место метки m1: Тут
Код:
while (1) { if(PIND.5==0){delay_ms(1000);break; }; if(PIND.3==0){delay_ms(300);break; }; }
еще можно понять назначение ;break;
Но после break; ниже и других таких-же if(PINB.0 && !PINB.1 && !PINB.2 && !PINB.3) {c=0; d=0;c_eep=c; d_eep=d;delay_ms(2000);break;} программа выйдет из while (1) и выполнение программы завершится, на самом деле проц пойдет выполнять команды до конца памяти и есть там все стерто, перейдет в начало программы.
Писать в еепром, да еще и в цикле, если данные не поменялись, неправильная идея, ресурс еепром хотя и большой, но он имеет свои границы. Если не приходит в голову, как это сделать используйте работу с еепром с update. Встроенные функции для работы с еепром работают и нет необходимости их заменять.
Найдите рабочий протеус (ищите 8.13) и запустите в нем пошаговую отладку. Поймете как ведет себя ваша программа и что надо поправить.
тоже думаю что достаточно создать 2 функции: чтение и запись (с проверкой несоответствия), работающие по параметрам, параметры задефайнить и подставлять по мере надобности.
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Терпеть не могу дефайны... Код становится не читаемый. В даташите нет никаких дефайнов.
goto лучше любых циклов. Быстрый безусловный переход в любое место программы. Я бы все заменил на goto.
Если выйти из goto то программа просто завершится и мк выключится)) Иногда такое тоже нужно. Например при включении питания мк надо включить лампочку и завершить программу... до следующего включения мк.
А вот писать епром в цикле действительно не лучшая идея. У епро всего то гарантируется 100.000 циклов записи. Это очень мало... И т.д.
Терпеть не могу дефайны... Код становится не читаемый. goto лучше любых циклов. Быстрый безусловный переход в любое место программы. Я бы все заменил на goto. Если выйти из goto то программа просто завершится и мк выключится)) Иногда такое тоже нужно. Например при включении питания мк надо включить лампочку и завершить программу... до следующего включения мк. И т.д.
Попробовал на железе нифига. При первоначальном включении на РD0 и РD1 нули, а стоит ввести любое другое состояние портов "В", к примеру чтобы было две единицы на портах D0 и D1, то D0 становится единица,а D1 ноль и не меняется больше никак как не меняй состояния портов "В", покуда не отрубишь питание. Питание отрубил и все точно так заново. Железо ведет себя так, как и в первоначальном варианте, что я выложил. Что за ерунда, что не так, где все же ошибка. Протеус 8.13 у меня давно стоит. Только не знаю как там пошагово смотреть. Да и вряд ли там он что то поможет.
Нафиг ГоТо! из-за него легко компилятор так озадачить, что в лучшем случае код раздует, но чаще в результате или сразу ничего не заработает или будут непонятные глюки, наигрался, хватит... Пусть в ассемблере остаётся. Из цикла есть более цивилизованные способы выхода - брейк, например А вот дефайны я какраз уважаю с ними можно сделать код и компактнее и понятнее и гибче, жаль в кодевижене у блока, раскрывающего дефайны относительно скудный потенциал... (мне, например, модифицируемых переменных - счётчиков не хватает)
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
_________________ Репозиторий STM32: https://cloud.mail.ru/public/2i19/Y4w8kKEiZ Актуальность репозитория: 1 сентября 2025 года Если чего-то не хватает с сайта st.com - пишите, докачаю.
Используя ГоТо вместо стандартных команд выхода ты, как минимум, не сможешь использовать оптимизацию на полную мощь, потому что этой командой создаёшь нестандартный код, который компилятор плохо оптимизирует (ну не может создатель компилятора предусмотреть всё) а можешь и стек сорвать - попробуй выскочиь не из цикла, а из подпрограммы... Я не говорю, что я ГоТо не использую, использую... но очень осторожно и считаю, что если его пришлось применить - значит моего профессионализма не хватило для того, чтобы изящно обойтись без него.
Добавлено after 2 minutes 30 seconds: например создал микроРТОС - там этих ГоТо но без них не получается... Но я их аккуратно в дефайны завернул - это немного снижает риск неправильного их применения
_________________ Для тех, кто не учил магию мир полон физики Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
значит проблема не в епром... а дальше. для начала надо проверить кнопки. настройки кнопок в программе не показаны.
там кнопок нет, там управление на порт "В" подаётся с микросхемы DTMF НТ9170. т. е с телефонного аппарата, в тональном наборе приходит комбинация цифр и меняет состояние на порту "В".
нету кнопок... ну так ничего не мешает подключить 4 кнопки для проверки... PINB.0 && !PINB.1 && !PINB.2 && !PINB.3 если бы ещё понимать что мы вообще делаем... и зачем... было бы проще))
если бы ещё понимать что мы вообще делаем... и зачем... было бы проще))
Это замена программы при ремонте PBX-PD1 (схема здесь есть на форуме, вылаживал когда то), когда бьёт контроллер, чтобы громкость устанавливать с аппарата программно можно было.У нас их очень много установлено и автодозвон не используется, так как на номере АТС запрограммирована переадресация. Чисто переговорное устройство.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения