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

Вопросы от начинающих по МК


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

50 минут назад, Demonrostov сказал:

Перепробовал все оптимизации

какие нах.. оптимизации при пользовании ИДИНА в Си:D

52 минуты назад, Demonrostov сказал:

Мне как бы придумывать истории ни к чему

так и не придумывай, поставь брекпоинт на пустую команду по переходу и выкладывай скрины.

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

  • Ответов 8,9т
  • Создана
  • Последний ответ

Топ авторов темы

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

Вам, как бы, намекнули, что по Вашему скрину невозможно понять

Не, не намекал, все как было выложил, без утайки.

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

Мало вероятно, что компилятор глючит на таком элементарном выражении

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

 

без оптимизации.png

с оптимизацией.png

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

какие нах.. оптимизации при пользовании ИДИНА в Си:D

Я хз :crazy:, но они есть:huh:

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

21 минуту назад, Demonrostov сказал:

и точка break point стоит на выходе из оператора

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

25 минут назад, Demonrostov сказал:

но они есть

есть.. и они ломают логику работы...

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

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

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

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

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

8 минут назад, IMXO сказал:

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

ну, т.е. это типа нормально? пиши не пиши волютуне будет random ?

Я если б в протеус не прогнал то и не знал бы что, что то не так))

Ладно, спс всем откликнувшимся, если есть совет для данного случая, как его избежать в дальнейшем, буду благодарен.

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

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

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

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

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

2 минуты назад, Demonrostov сказал:

пиши не пиши волютуне будет random ?

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

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

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

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

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

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

56 минут назад, Demonrostov сказал:

можете сами попробовать, а потом говорит о маловероятности

Зачем мне пробовать элементарное действие ? Ни один компилятор не позволит себе заглючить в такой простой конструкции. Что, кстати, не скажешь о Протезе.
Подозреваю, Вы понимаете о чём выше шла речь, но упорно продолжаете тут нас троллить, показывая на скринах какую-то ересть.

21 минуту назад, IMXO сказал:

для обеспечения целостности данных компилятор должен применять атомарный доступ

Небольшая поправочка - программист должен это делать, а не компилятор :)

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

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

Небольшая поправочка

@Alex я это в листингах  ХС8 вижу, при обращении к структуре описанной волетуне , компилятор данные из переменной пихает в темповскую  производит действия и только потом возвращает обратно.

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

9 минут назад, IMXO сказал:

компилятор данные из переменной пихает в темповскую  производит действия и только потом возвращает обратно

Да. Это означает, что полностью отключена оптимизация. Но не означает, что компилятор делает эту операцию атомарной.
RMW, по определению, не может быть атомарной :)

Реализация атомрности - забота программиста, а не компилятора. Только программист адекватно может оценить ситуацию.
В любой нормальной ОС, например, имеются инструменты (средства синхронизации) для атомарного доступа к объектам.

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

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

но упорно продолжаете тут нас троллить, показывая на скринах какую-то ересть.

Ну да,сидел такой, кого бы по троллить, решил на форум написать))).

 

13 минут назад, snn_krs сказал:

запретите прерывания перед сравнением, а после разрешите.

тогда прерывание не срабатывает, не успевает)), пробовал.

Вот так работает))

timer1_init();timer_16=0; sei();//разрешить прерывания
	Set_KEY;//установка кнопок, активный 1
nach:	
	if((timer_16==3000)){
		if(KEY_()==power_key)
		{goto start;}} else {goto nach;}
	
start:	
	PWM_ON;// включаем питание

 

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

10 минут назад, Demonrostov сказал:

Ну да,сидел такой, кого бы по троллить, решил на форум написать))).

Такое ощущение, что да )

Вам выше уже намекнули про прерывания и атомарность. Копайте в этом направлении.
Надеюсь, Вы в состоянии догадаться сравнить 2 числа (1010 и 768) в hex-представлении понять в чём проблема ? )

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

8 minutes ago, Demonrostov said:

тогда прерывание не срабатывает, не успевает

Как оно может не успевать ? При том что вы сделали ошибки будут выскакивать реже и все.

cli();
if( ... ) {
  sei();
  ...
}
seii();
...

 

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

 

2 минуты назад, donec сказал:

timer_16 кроме  extern вообще где-нибудь описана,

конечно, иначе ругаются)). В файле KEY.C volatile uint16_t timer_16; в файле KEY.h extern volatile uint16_t timer_16; ну и инклюдами все притянуто, тут же прикол другой, что сравнение в виде равно работает, а если больше, больше или равно нет.

3 минуты назад, snn_krs сказал:

Как оно может не успевать ?

бес понятия, пишу только факты, ничего не придумываю, как некоторые думают)). Вчера весь вечер голову ломал, ответа явного не нашел, потому сюда написал. Рабочий варик кода я уже установил, так что пишем дальше:help:

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

@Demonrostov , пишите такой код :

di(); // Запретить прерывания
uint16_t u16_temp = timer_16;
ei();  // Разрешить прерывания
if(u16_temp > 1000)	
	{

Удивляетесь, что он работает.
Пытаетесь понять почему.
Понимаете.
Радуетесь.

 

15 минут назад, Demonrostov сказал:

файле KEY.C volatile uint16_t timer_16; в файле KEY.h extern volatile uint16_t timer_16; ну и инклюдами все притянуто

Жесть )
И Вы ещё что-то плохое хотите сказать о разработчиках компилятора ? :lol:

 

15 минут назад, Demonrostov сказал:

Рабочий варик кода я уже установил

Это - не рабочий варик, а костыль. Который, как уже сказали выше, так-же будет глючить, но реже.

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

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

И Вы ещё что-то плохое хотите сказать о разработчиках компилятора ?

Вы лучше как правильно надо сделать напишите, а не удивляйтесь, это и я умею делать)

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

Главное - понять, почему он работает

:buba:

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

1 минуту назад, Demonrostov сказал:

Вы лучше как правильно надо сделать напишите, а не удивляйтесь, это и я умею делать)

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

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

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

Попытайтесь понять, отчего возникают проблемы

Я понимаю так, момент сравнения попадает под прерывание, с переносом данных трабл получается  вот и результат. Если изменить время прерывания то и результат скорее всего будет другой(но это не точно). Я думал, что компилятор данные волатиле корректно обрабатывает, и всегда напрямую использовал эти переменные, на такое недоразумение ни разу не попадал.

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

27 минут назад, Demonrostov сказал:

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

Да. Сравнение идёт в несколько этапов, побайтово. По этому, как значение становится 768 (это 0x0300), и сравнивается старший байт, мы получаем истинное условие. Это в двух словах. Более детально - нужно смотреть дизасм и разбираться.

 

27 минут назад, Demonrostov сказал:

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

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

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

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

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

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

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

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

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

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

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

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

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

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