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

Язык СИ для микроконтроллеров


Рекомендуемые сообщения

В отладчике нет ничего страшного и сложного. Ставите точку останова на первой строке Вашего кода, все используемые переменные выносите для отслеживания. И после этого пошагово выполняете программу. И смотрите что получается в переменной, после ваших операций.

А для начала возьмите любое значение и распишите на листике сами. Точно так же, как это бы выполнял бы МК, пошагово записывая, что получается в переменной результата. После этого включаете отладку и смотрите что получилось у Вас и что делает МК.

В каком компиляторе пишите? В микроС я пользовался симулятором, без МК и схемы проходил код. В других компиляторах тоже должно быть такое...

Изменено пользователем swat24
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

> swat24

спасибо за терпение, ещё раз прошуршал всё обычным симулятором, проблема как чаще всего бывает банальна :heat: . тупая опечатка..

среда MPLABX + HI-TECH C.

        itoa(&ss1,buf2,10);
        strcat(&ss2, buf2);

первая строчка, преобразую число в buf2 в строковое значение, ложу это в ss1, тут все норм, а дальше вместо объединения строк ss2 и полученной ss1, делаю конкатенацию строки ss2 и числа а buf2 :lol2:

всё время расслабляю себя тем, что вроде я наверно чего то ещё не узнал, отсюда и проблема, а проблема в тупых опечатках) в программировании (только не в Си) уже 7 лет, а подобные случаи все равно нет нет а простреливают)

лирика) всем спасибо!

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Подскажите ка правильнее делать:

так:

void interrupt isr(void) {
 if(T0IF) {
  T0IF=0;
  ..........  // "много" кода
 }
}

или так:

void interrupt isr(void) {
 if(T0IF) {
   ..........  // "много" кода
  T0IF=0;
 }
}

Т.е. флаг в первую очередь сбрасывать или после обработки прерывания?

И сюда же вопрос: в обработчик прерывания таймера0 можно попасть дважды или пока не выполнится весь код с предыдущего прерывания новое прерывание не придет. Собс-но отсюда и вопрос о том как(т.е. где) правильно сбрасывать флаг T0IF

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

и не так и не так. В прерывании долго сидеть нельзя. Я обычно первым делом сбрасываю флаг, потом выставляю свой флаг и в главном цикле уже обрабатываю "много" кода. А если там работа с несколькими переменными, то обрабатывайте после сброса флага прерывания.

Ссылка на комментарий
Поделиться на другие сайты

Я сейчас экспериментирую и код немного изменил.

А вообще это сообщение компилятора появлялось в момент Build Project

Это не ошибка просто варнинг был....

Но сейчас я подозреваю, что это из-за того что у меня был вызов if (!Func) Proc; а нужно наверное было так писать if (!Func()) Proc();

Велик и могуч Си-язык :) ну и я учусь)

Спасибо что откликаетесь все время, надеюсь я осилю этот язык)

А что по этому поводу скажете

....вопрос: в обработчик прерывания таймера0 можно попасть дважды или пока не выполнится весь код с предыдущего прерывания новое прерывание не придет.

и собс-тно другие прерывания тоже в очереди или как? могут "пролететь"?

Ссылка на комментарий
Поделиться на другие сайты

Добрый день, друзья! Подскажите как работать с EEPROM памятью. Работаю в CVAVR. Как записать и считать переменную из EEPROM я знаю, вопрос в другом. Мне необходима эта память для сохранения настроек. Сохранить- то понятно как, но вот незадача, как задать начальные данные, ибо без них программа не будет выполняться. А если задать их после дефайнов, то при отключении питания переменные будут каждый раз обнуляться. Или я что- то не так понял?

Ссылка на комментарий
Поделиться на другие сайты

Спасибо за оперативный ответ! Как я понял епром пишется из флеша при первом старте. А при втором он ничего туда не запишет если я объявлю переменные в EEPROM после дефайнов?

Ссылка на комментарий
Поделиться на другие сайты

При первом включении запуске программы Вам нужно всего-лишь проверить какую либо ячейку на 0xFF и потом записать туда значение, отличное от 0xFF. Это и будет флагом установленных по-умолчанию параметров.

Ссылка на комментарий
Поделиться на другие сайты

С этим связано много проблем. Первая- я не умею работать с ячейками памяти. Пишу на си в cvavr. Никогда ранее не приходилось об этом даже думать. Работа с еепром в cvavr сводится к тому, что перед объявлением переменной нужно лишь подставить eeprom u8 buf. Вторая проблема в том, что если в переменной будет 255 то при следующем запуске программа перепишет все на дефолт.

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

Извиняюсь за тупые вопросы, как я сам до этого не додумался? Спасибо, пошел кодить. Все равно осталась масса тупых вопросов, аж задавать стесняюсь)))спасибо!

Ссылка на комментарий
Поделиться на другие сайты

какая хитрая память, еле победил. Если напрямую проверять переменную из ееprom

if(eetest==255)

{}

то ничего не получается, а если сперва прочитать ее в другую переменную, то все хорошо:

test=eetest;

if(test==255)

{}

Еле разобрался.

Ссылка на комментарий
Поделиться на другие сайты

Ещё вопрос, какие есть хорошие приемы для записи переменных в EEPROM при отключении питания?

Мощный электролит, диод по питанию и опрос ноги на входе, не? Думаю, отправлять МК в сон или же полностью обрубать.

Ссылка на комментарий
Поделиться на другие сайты

А не подскажете какого номинала конденсатор поставить? В цифре слаб, а в аналоге вообще дуб дубом. Для Atmega8, с семью ШИМами через UNL2003.

Изменено пользователем serenbkii
Ссылка на комментарий
Поделиться на другие сайты

Помогите разобраться с таймером в pic16f877. Micro C for Pic.

Как выполнять одновременно 2 функции. Если есть примеры дайте пожалуйста. Благодарю.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...