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

5 minutes ago, haker_fox said:

 

Всё это я автора просил проверить вот тут

 

Так по коду не видно. Я и спросил. Оно ж и метки на одном месте были? Поэтому нет уверенности.

Поделиться сообщением


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

2 minutes ago, Tolyaha said:

Я и спросил.

В данном случае я вам маленько посочувствовал, так сказать)

Поделиться сообщением


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

Сиё:

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

if(((GPIOA->IDR) & 0x40) == 0x40)

И сиё:

40 минут назад, Vlad_G сказал:

if(GPIOA->IDR & 0x40 == 0x40)

разные вещи. Учите язык си! Естественно, что во 2-м случае компилятор оставил только "goto _2".

 

PS: Дурак как всегда оказался программист, а не компилятор.  :unknw:

Поделиться сообщением


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

1 minute ago, jcxz said:

Естественно, что во 2-м случае компилятор оставил только "goto _2".

Ахренеть! А я то машинально смотрел на первый вариант скобок и не заметил, что автор убрал вообще всё что можно.

3 minutes ago, jcxz said:

Учите язык си!

Люто плюсую!

3 minutes ago, jcxz said:

PS: Дурак как всегда оказался программист, а не компилятор.

@jcxz, что то вы нервным стали))

Поделиться сообщением


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

Just now, jcxz said:

PS: Дурак как всегда оказался программист, а не компилятор.  :unknw:

Никогда не исключал такое дело.

Скобки - это уже мои вариации, сразу были мысли, что может в них дело. Вот посмотрел разные варианты - и с кучей скобок (попросили пожалеть народ) и без них, ессно и промежуточный вариант не забыл.

Порт включаю так:

RCC->AHBENR |= RCC_AHBENR_GPIOAEN;						//включаем GPIO A

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

Quote

haker_fox  Вот здесь r3 совпадает с тем, что отладчик читает в IDR?

IDR = 0x4660, в r3 пишет что = 0x4800 0000

Поделиться сообщением


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

3 minutes ago, Vlad_G said:

и с кучей скобок (попросили пожалеть народ)

Так не все же их убрать, а только лишние.

3 minutes ago, Vlad_G said:

IDR = 0x4660, в r3 пишет что = 0x4800 0000

Всё, вам уже сказали в чём дело. Пробуйте. Должно работать.

Поделиться сообщением


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

даже при отсутствии оптимизации неиспользуемый код может удаляться. А тут вообще кода нет. Точку остановки поставить можно, но она сместиться вниз. На первый неудаленной исполняемый оператор.
Если хотите четко в отладчике увидеть переход, то ставьте хотя бы присвоение значения какой то переменной, или лучше пустой цикл на несколько действий, 
{
int i =2;
while (i--) {};

}
ну типа такого. Это компилятор не удалит. И всегда можно будет поставить Breakpoint
раньше я просто ставил NOP и уже можно было на нем поставить точку останова. В Cube IDE не пробовал.


 

Поделиться сообщением


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

15 minutes ago, bgc said:

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

Вот в этом все и дело. Как знатузнать, что что-то было убрано... Безусловный переход, это тоже код, вполне себе занимает место в памяти, а куда идет, так это мое дело (защищенную память не рассматриваю). В ассме всё так делал заглушки на начальной стадии, потом дописывал нужный код. И что тогда значит - отключить оптимизацию? Ладно.

Благодарю откликнувшихся! Решено. Сделал нормальную развилку и все пошло.

Поделиться сообщением


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

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

ну типа такого. Это компилятор не удалит. И всегда можно будет поставить Breakpoint

Как раз пустой цикл компилятор с большой вероятностью удалит. Получить неудаляемый код можно добавив какую-нить intrinsic-функцию. Например: __ISB() или аналогичную.

Развернётся всего в одну команду, причём - никак не пересекающуюся по регистрам с окружающим кодом. Не зависимо от уровня оптимизации. И на неё можно спокойно ставить бряк.

Поделиться сообщением


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

Да, пустой удалит, но если переменную цикла объявить как volatile, то оставит жить 

Поделиться сообщением


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

1 hour ago, Vlad_G said:

Как знатузнать, что что-то было убрано...

Нужно знать и понимать язык на котором программируете. Думать немного как компилятор.

1 hour ago, Vlad_G said:

И что тогда значит - отключить оптимизацию?

 

18 minutes ago, Vlad_G said:

но если переменную цикла объявить как volatile, то оставит жить

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

Поделиться сообщением


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

Обид нет. Скачал книгу. Тут только вопрос насколько соотносится Си для ПК и для МК, скажем на уровне компилятора.

А вот чем вам не понравилось - volatile? Скажем, чтобы увидеть переменную в отладчике STMStudio её надо пометить как волатиле, компилятор выделяет для нее постоянный адрес и спокойно можно работать с ней "дистанционно". А динамические переменные STMStudio уже не видит (может не разобрался (?)). Видел кучу "ср.чей" в тырнете относительно волатиле и разводить еще один не собираюсь, но все же коротенько, если возможно коротенько. 

В моих случаях объема ОЗУ хватает с лихвой, что бы экономить и применять динамические переменные.

Поделиться сообщением


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

7 minutes ago, Vlad_G said:

Тут только вопрос насколько соотносится Си для ПК и для МК, скажем на уровне компилятора

Не понятен ваш вопрос. Что вы хотели спросить? Вам бы понять как устроен язык. А это будет одинаково и для компьютера и для микроконтроллера.

8 minutes ago, Vlad_G said:

Скажем, чтобы увидеть переменную в отладчике STMStudio её надо пометить как волатиле

Ключевое слово volatile предназначено совершенно для иного. Для чего - читайте. И здесь на форуме обсуждали несколько раз. И то, что вы с помощью неё отлаживаетесь говорит о невладении инструментов. Ну это всё равно, что забивать гвозди пассатижами. Да, можно. Но адекватный плотник скажет вам, что вы неправы.

9 minutes ago, Vlad_G said:

компилятор выделяет для нее постоянный адрес

Вздор. Происходит другое.

9 minutes ago, Vlad_G said:

А динамические переменные

Динамические переменные? О таких не слышал. О динамической памяти знаю. Но динамических переменных не существует.

10 minutes ago, Vlad_G said:

Видел кучу "ср.чей" в тырнете относительно волатиле и разводить еще один не собираюсь

Вы не срачи читайте, а книги. И разводить не надо) Уточнить можно.

11 minutes ago, Vlad_G said:

В моих случаях объема ОЗУ хватает с лихвой, что бы экономить и применять динамические переменные.

Дело ваше. Хотите - делайте правильно. Хотите - делайте так, как считаете нужным.

Поделиться сообщением


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

49 minutes ago, haker_fox said:

Ключевое слово volatile предназначено совершенно для иного.

Если коротко, то volatile это сообщение компилятору, что данная переменная (в памяти) может быть изменена асинхронно. Например из прерывания или в результате работы DMA.
В этом случае компилятору запрещено копировать значение переменной из основного места в памяти куда либо (например, в регистр), с целью оптимизации кода. 
При каждом обращении к этой переменной компилятор будет повторять считывание из памяти. И брать последнее актуальное значение.

Поделиться сообщением


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

6 minutes ago, bgc said:

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

Ну и?) Вы знаете, я знаю, нужно чтобы автор сам разобрался с этим вопросом.

Поделиться сообщением


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

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

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

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

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

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

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

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