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

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


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

16 минут назад, ARV сказал:

А это ещё нафига?

просто не понимают как работают данные конструкции

Смысл объяснять "обезьяне" как стрелять из автомата, хотя в ютубе и такое увидишь

Не хочу никого обидеть, но прежде чем садиться писать прошивки сложнее моргания лампочки

Сядте, прочитайте основы си и его конструкций. Вопросы снимутся сами собой

В данном случае ткнули носом, а дальше ...........

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

Непонятно одно. Что означают сие слова :

8 часов назад, ART_ME сказал:

Назад программа возвращаться не будет никогда

?
Что значит "не будет возвращаться", и самое главное - куда она не будет возвращаться ? Обратно, в точку начала исполнения шага ? Тогда каким образом Вы хотите исполнять остальные шаги ?
Конкретизируйте этот момент.

 

8 часов назад, ART_ME сказал:

Для эксперимента проверил goto,  работает без замечаний.

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

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

7 часов назад, hasl сказал:

просто не понимают как работают данные конструкции

Смысл объяснять "обезьяне" как стрелять из автомата, хотя в ютубе и такое увидишь

@hasl , вот вроде бы и ответили на вопрос, и ответ оказался полезен не только мне, и тут же обгадили с головы до ног.

Для чего? Какая лично Вам радость в оскорблении постороннего Вам человека?  

Вот ей-Богу не понимаю Вашей мотивации. Комплекс неполноценности? 

-------------------------------------------------------------------

3 часа назад, Alex сказал:

Что значит "не будет возвращаться", и самое главное - куда она не будет возвращаться ? Обратно, в точку начала исполнения шага ? Тогда каким образом Вы хотите исполнять остальные шаги ?
Конкретизируйте этот момент.

Это значит, что вполне возможно, что по окончании исполнения всех заданных операций (шагов) новый запуск будет через RESET.  То есть не имеет никакого значения, что будет в конце.

3 часа назад, Alex сказал:

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

Насколько я понял, в данном случае применение команд определяется структурой программы.

Та, которую я  привел выше, заточена под goto, отсюда и возникновение у меня этой проблемы,т.к. заменить в данной структуре goto нечем.  В то же время, если выделить операции (шаги) в отдельные независимые блоки, то удобнее оказывается применение например case.

Какая из этих структур окажется для меня предпочтительней, я пока не знаю. Решу по ходу пошаговой отладки. 

Изменено пользователем ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

8 часов назад, ARV сказал:

Для выполнения кейсов последовательно достаточно не ставить брейки

Попробую не согласится, ведь программа будет выполнять ту строку чему равен tmp? выполнив ее при наличии break; она покинет switch.

Если break; отсутствует то программа перейдет на следующую строчку но выполнять ее не будет, так как  для выполнения следующей строки tmp должен быть равен 4, для этого и нужно будет в предыдущей строке tmp++

Это мое мнение, спецы пусть поправят если это не так

tmp = 3;

switch(tmp)
                        {
                        case 0:    нужное действие; break;
                        case 1:    нужное действие; break;
                        case 2:    нужное действие; break;
                        case 3:    нужное действие; tmp++; break;
                        case 4:    нужное действие; break;
                        case 5:    нужное действие; break;
                        } 

1 час назад, ART_ME сказал:

В то же время, если выделить операции (шаги) в отдельные независимые блоки

Думаю можно и в кейсе все нужное прописать.

Сергей.

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

Так наверное?

switch(tmp)
                        {
                        case 0:    нужное действие; tmp++;  break;
                        case 1:    нужное действие; tmp++;  break;
                        case 2:    нужное действие; tmp++;  break;
                        case 3:    нужное действие; tmp++;  break;
                        case 4:    нужное действие; tmp++;  break;
                        case 5:    нужное действие; tmp++;  break;
                        } 

Изменено пользователем ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

45 минут назад, optima сказал:

Попробую не согласится,

Не пробуйте:

14 часов назад, ART_ME сказал:

При запуске программы опрашивается галетник на 10 положений,  и программа стартует с метки, указанным этим галетником.

Программа всегда последовательно проходит все шаги начиная с указанного галетником

Т.е. если выставили 1, то будут последовательно выполнены шаги с 1 по 10, если выставили 5, то будут исполняться шаги с 5 по 10. 

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

14 минут назад, ARV сказал:

Не пробуйте:

Да проверил, вы были правы! инкремент тут бесполезен, но зато теперь четко усвоил как функционирует кейс.

Сергей.

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

10 часов назад, hasl сказал:

просто не понимают как работают данные конструкции

Смысл объяснять "обезьяне" как стрелять из автомата, хотя в ютубе и такое увидишь

Не хочу никого обидеть, но прежде чем садиться писать прошивки сложнее моргания лампочки

Сядте, прочитайте основы си и его конструкций. Вопросы снимутся сами собой

В данном случае ткнули носом, а дальше ...........

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

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

 

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

20 минут назад, hasl сказал:

у вас сер нет желания учиться

А вас сер я не просил высказывать здесь свое мнение о моем желании или не желании учиться, зафлуживая тему.

В связи с чем и подал на вас сер жалобу.

--------------------------

1 час назад, optima сказал:

ну да только если нужно по порядку то break; не нужен

Так?

switch(tmp)
                        {
                        case 0:    нужное действие; tmp++; 
                        case 1:    нужное действие; tmp++; 
                        case 2:    нужное действие; tmp++; 
                        case 3:    нужное действие; tmp++; 
                        case 4:    нужное действие; tmp++; 
                        case 5:    нужное действие;  break;
                        } 

Изменено пользователем ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

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

нет, так!  Чему будет равен тmp с той строки и будет выполнятся до конца

switch(tmp)
                        {
                        case 0:    нужное действие;
                        case 1:    нужное действие;
                        case 2:    нужное действие;
                        case 3:    нужное действие;
                        case 4:    нужное действие;
                        case 5:    нужное действие;
                        } 

Сергей.

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

Иными словами,  разница с goto только в том, что вместо длинного выборного перечня:

if (tmp == 1) goto 1;

if (tmp == 2) goto 2;

....

if (tmp == 10) goto 10;

Мы пишем всего лишь:

switch(tmp)

Плюс очевиден, спасибо, попробуем. 

Тем более, что это нетрудно, т.к. изначально выбранная структуру под goto не меняется, упрощается лишь задание выбора. 

Причем значительно, потому как согласно последней вводной число операций повысилось до 16, и не все из них подлежат ветвлению, часть меняют только параметры.

Изменено пользователем ART_ME

Никогда не спорьте с дураками. Они опустят Вас до своего уровня и победят за счет опыта.

 

 

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

  • 10 месяцев спустя...

Здравствуйте. Споткнулся на ровном месте на элементарном вопросе. Большая просьба разъяснить что я делаю не так.

микроконтроллер: atmega8

компилятор: avr-gcc (GCC) 10.2.0

Среда разработки: Eclipse Version: 2020-03 (4.15.0)

OC: Arch linux 5.11.11

 

Но это не важно. Проблема (возможно в моей голове проблема) возникает и с компилятором gcc в моей системе.

Суть.

Обнуление 7 бита порта D

PORTD=~(1<<7); //вроде простая операция. Я понимаю что проще PORTD=0b0111 1111; но цифра 7 это дефайн в начале библиотеке

И вот варнинг:

../LCD.h:23:15: warning: unsigned conversion from 'int' to 'uint8_t' {aka 'volatile unsigned char'} changes value from '-129' to '127' [-Woverflow]

Что за?

Ок. Эксперимент.

 

	unsigned char tmp=0;
	tmp=~0xff;

Причём такую простую операцию я попробовал сделать и скомпилировать не под AVR, а под x86

Варнинг тот же

../LCD.h:24:6: warning: unsigned conversion from 'int' to 'unsigned char' changes value from '-256' to '0' [-Woverflow]

Я так понимаю, что число 0b1111 1111 после побитовой инверсии преобразуется в число 0b0000 0000 и присваивается  переменной tmp. Откуда предупреждение?

Ок, если сделать так:

	unsigned char tmp=0;
	tmp=0xff;
	tmp=~tmp;

Всё ок. Что не так?

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

1 hour ago, DarkDigger said:

Что не так?

В среде avr-gcc минимальный размер целых констант равен размеру int, т.е. 2 байта. То есть все небольшие целые константы расширяются до двух байт.

Получается, что (1<<7) = (0x0001 << 0x0007) = 0x0080. После инверсии имеем ~(0x0080) = 0xff7f, которое равно -129. При записи в однобайтовую переменную старший байт исчезнет, вместо 0xff7f получим другое число 0x7f , о чём компилятор и предупреждает программиста.

То же самое м во втором примере. Число 0xff на самом деле есть 0x00ff. Поэтому после операции иневертирования получаем 0xff00, что в понимании компилятора есть -256. Поэтому он и предупреждает, что записи такой величины в unsigned char старший байт не поместится и величина изменится на 0х00.

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

просто из-за настроек вашего компилятор число было приведено к int

Сделайте приведение типов
PORTD=(uint8_t)(~(1<<7));

и забудьте

это не ошибка, а вас только предупредили

пс..... и за правило возьмите приводить к нужному типу после вычислений и во время

И видно будет сразу и ошибки и не словите глобальный глюк при отладке

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

  • 9 месяцев спустя...

Раньше много писал на Турбо Паскале. Хочу освоить С для СТМ32 для управления силовыми устройствами. Например 3х-фазный мотор 36якорей внешний статор, 24магнита ротор. Задача - разгон-торможение в нужных точках несколько раз на оборот... Реально ? 

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

статор с якорями - это какое-то новенькое "изобретение" в теории электромашин ...

Мудрость приходит вместе с импотенцией...

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

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

31 минуту назад, Starichok сказал:

это какое-то новенькое "изобретение"

КМК это просто товарисч ещё не научился выговаривать бесколлекторный двигатель :)

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

2 часа назад, Paul Boris сказал:

Раньше много писал на Турбо Паскале. Хочу освоить С ...
Реально ? 

Кто же знает, реально это будет для Вас, или нет. Попробуйте.

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

Много двигателей слелал товарищ, хорошо выговаривающий 'бесколлекторный'? Если не одного, то, как говорится 'только языком...'

Могу по бартеру за знания  и помощь по С и СТМ32 изготовить на нашем заводе любое 'железо' на универсальных и ЧПУ станках. Сталь, пластики и прочее... Мы вне основного производства каждый год разрабатываем новые двигатели. Получили 2 гранта на науку. Могу рассказать как....

Флуд не терплю - признак массы свободного времени и 'ничегонеделанья'

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

@Paul Boris , а в чём вопрос то ? Всяких разных книг, статей, и прочей инфы по языку С - море. Читайте, учите, пробуйте, экспериментируйте, ...
Если есть конкретные вопросы - задавайте. А не абстрактные, типа "Реально ?", "Как сделать ?", и т.д....

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

4 минуты назад, Alex сказал:

@Paul Boris 
Если есть конкретные вопросы - задавайте. 

Ок. Спасибо. Отладочная плата - советуют STM32F4-DISCOVERY. Подходит для моих целей? Собираюсь купить

Нашел курс https://narodstream.ru/stm-urok-1-ustanovka-keil-μvision/ 

Или лучше другой курс ?

Сорри за 'наивные' вопросы - работал раньше в паре хорошим электронщиком. Мой профиль сместился на конструирование и изготовление 'железа'

Спасибо за помощь 

Что нужно сконструировать-изготовить --- к Вашим услугам'с

 

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

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

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

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

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

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

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

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

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

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

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

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