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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

но они есть

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.

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

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

Привет знатокам). Пытаюсь вывести прочитанное 24 битное значение в двоичном коде, но столкнулся с тем, что старшие 8бит выводит нули. Не могу врубится почему, помогите разобраться!

	uint8_t a;
	uint32_t adc_value_1_sum;
	uint8_t DATA_bin[25];
	adc_value_1_sum=8388607;//выводим условное число в виде двоичного кода, должно получится b0111 1111 1111 1111 1111 1111
	for (a=0;a<24;a++)
	{	
				if(adc_value_1_sum & (1<<a))
				{DATA_bin[23-a]=49;}// если бит =1, пишем код числа"1"- 49 
				else 
				{DATA_bin[23-a]=48;}// если бит !=1, пишем "0"- 48
	}
    // потом DATA_bin выводим на экран итог  b0000 0000 1111 1111 1111 1111

Как это исправить? AtmelStudio 6

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

((( все исправлено )))

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

старшие 8бит выводит нули

 

20 минут назад, Demonrostov сказал:
(1<<a)

А как вы думаете что представляет для компилятора это число.

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

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

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

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

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

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

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

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

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

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

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

  • Сообщения

    • Конечно нет. Более того, вышеупомянутой 140уд1 достаточно для 90% всех БП, но новые детали позволяют применять разные схемотехнические решения ранее недоступные - например, отсутствие отрицательного источника питания или цепей балансировки ибо их смещение по входам может оказаться пренебрежимо мало, а крайне малый ток полевикового входа не требует сильного согласования импедансов для выравнивания смещений, создаваемых входными токами. Но в чем тогда интерес в разработке схемы, если это будет всё тот же болгарский БП из 70х, причем на тех же самых деталях и по абсолютно такой же схеме Понятно, что особо улучшать схемотехнику линейных БП некуда. Но со старыми деталями, требующими дополнительные пару вольт питания из-за узкого диапазона синфазных сигналов или имеющих почти микроамперы входного тока приходится схемотехнически возиться как с каким-то пажылым дедушкой - там ему костыль в виде отрицательного питания, тут надо импедансы равные по входам, не то смещение будет (у 140уд1, например, даже нет выводов балансировки, т.е. смещение надо вводить отдельной  цепью по входу), а здесь надо выход повторителем усилить, ибо не может раскачать базу силового транзистора... и т.д. Повозиться из интереса можно, но не знаю какое веселье в который раз изобретать один и тот же болгарский велосипед.   Это даже скорее не БП, а гибрид из БП и  вольтамперметра для всяческих издевательств над детальками. Как пример. И вот ещё. Причем эти "много оу" не просто какие-то там буферы-измерялки, а именно в петле ООС стоят, что прибавляет головной боли схемотехнику. Я пытался повторить их "переключалку петель оос", или просто "клампу", как я ее обзываю, в микрокапе хотяб на моделях ОУ типа 741, с использованием в интеграторе TL071, но ничего не вышло, схема стабильно даёт овершуты под 5-10%, что говорит о неоптимально скорректированной под БП АЧХ. Этот рубеж пока что мне не доступен никак, вот  и вожусь со схемой шелестова на четырёх ОУ.  
    • Думаю тут мини версию усилка сделать. А то валяется коробочка одна, от заброшенного одного проекта) Турецкий фильтр тут плату добиваю неспешно, с ней совместить что ли. TDA7377 норм будет ?  
    • Что за бп такой, что аж 10 оу надо. После керамики идёт предпочтение "индустриальных". а точно эти "новейшие новинки" вот так нужны всегда ?  вполне себе может быть, почему и нет. сомнительный кайф корпеть над мелкотой лишний раз)
    • лапки 3 и 4 IC2 ? Точней 15-16-17 CD разъёма.   что это значит ?  
    • Мне третий раз написать что можно? Или у кого аргументированные возражения будут?
    • Я согласен, что эти корпуса неудобны для ручного монтажа, но брать микросхему хуже по параметрам просто потому что корпус надо устанавливать под лупой эт не оправдание кмк. И древний. Современные детали в керамике достать проблематично. "Точно орига" может быть только при прямой покупке у поставщика, ну или отечественной комплектухи, пока китайцы благо не поняли, что можно на 140уд7 написать 140уд17 и никто не заметит) А про качество - ну посмотрите на сроки сохраняемости, это пожалуй единственный плюс герметичного керамического корпуса для любителя. Но если мне в БП на 10 ОУ пихать каждый корпус керамический... Цена выйдет такая что дешевле взять заводской SMU
    • Ещё как работало, выжимал все соки бесконтрольно вот и горели. Заполучил вв обмотки от твс90-лц2 вот и отжигал по-полной
  • Похожий контент

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