05.05.2017, 10:05
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от NewWriter
|
Если бы сами попробовали, то знали бы. Просто так компилятор не выбросит i, нужны веские на то основания. А эти самые "веские основания" в пошаговой отладке неприменимы.
Предлагаю с этим вопросом вам разобраться самостоятельно.
|
Предлагаю вам не писать всякую херню если вы не в теме. Эдди вам правильно всё сказал. Компилятор имеет полное право выкинуть переменную если она нигде больше не используется. Что в общем и происходит на самом деле - переменная спокойно выкидывается компилятором как атавизм.
И юзать -O0 при отладке это упоротое нубство. Что в принципе и подтверждает ваш низкий уровень знаний.
Последний раз редактировалось STM32F0; 05.05.2017 в 10:07.
|
|
|
|
05.05.2017, 10:37
|
|
Частый гость
Регистрация: 03.05.2017
Сообщений: 32
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Всем доброго дня,
Закоментирование SetSysClock() не дало результата, так же как и PLL_M 8 и HSE_VALUE = 8000000. В пошаговом выполнении программа идет в main(), в GPIO_SetBits() и там циклится, состояние GPIOD не меняется, все регистры "0"...
NewWriter ваш пример работает, диоды загораются. Почему с SPL не работает...
Похоже нужно готовится к написанию программ непосредственно в регистрах
Последний раз редактировалось Den; 05.05.2017 в 10:42.
|
|
|
|
05.05.2017, 11:31
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от STM32F0
|
И юзать -O0 при отладке это упоротое нубство. Что в принципе и подтверждает ваш низкий уровень знаний.
|
Не надо генерировать бред. Вы сами то вылезали дальше, чем F0? Во-во, то-то и оно.
Попробуйте пошаговую отладку -O3, а лучше -Os, поделитесь потом впечатлениями.
Так что не пишите бреда.
Будете еще, блин, советовать разбираться с непонятной ситуевиной на уровне -O3. Вот это и есть упоротое нубство.
Сообщение от STM32F0
|
переменная спокойно выкидывается компилятором как атавизм.
|
Атавизм - это образ вашего мЫшления.
Напишите volatile - и будет ваша переменная цела и здорова.
Лучше бы не за переменную цеплялись, а разобрались бы в неполадках у вопрошающего. Или что, кишка тонка? То-то и оно.
Уцепились за переменную i в моем примере, а у автора вопроса не увидели лажи. То-то же! Вот вам и уровень ВАШИХ знаний.
А теперь следите за пальцем:
int main(void)
{
void gpio_led_f (void);
....
while ....
объявление функции внутри функции.
Не вызов, а объявление.
Фактически, функция настройки портов НЕ ВЫЗЫВАЕТСЯ.
В этом и причина. Это и объясняет полные нули в регистрах - тактирование модуля GPIOD не было включено, потому что функция не была вызвана.
Признаться, я тоже не сразу заметил, если честно. но мне простительно, вы же считаете меня нубом. А сами то? Вот именно. Вы даже не можете отличить объявление функции от ее вызова. Ога!
Так кто после этого упоротый нуб с недостатком знаний? Ну что? Можете только с простейшей i ковыряться, а логику работы уже не вкуриваете
Последний раз редактировалось NewWriter; 05.05.2017 в 11:51.
|
|
|
|
05.05.2017, 11:51
|
|
Частый гость
Регистрация: 03.05.2017
Сообщений: 32
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Хмм...возможно, но помойму я и с void делал и без void, попробую..спасибо
Последний раз редактировалось Den; 05.05.2017 в 11:54.
|
|
|
|
05.05.2017, 11:55
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Так, ЫЕЬ32, харэ генерировать бред, засоряешь ветку.
Сообщение от STM32F0
|
Я всё связанное с СПЛ тупо игнорирую.
|
так ошибка была не в SPL, а в вызове (вернее, в невызове) обычной сишной функции. Так что это ваш прокол. Промолчали бы - за умного сошли бы.
Последний раз редактировалось NewWriter; 05.05.2017 в 12:01.
|
|
|
|
05.05.2017, 12:17
|
|
Частый гость
Регистрация: 03.05.2017
Сообщений: 32
Сказал спасибо: 3
Сказали Спасибо 1 раз в 1 сообщении
|
Re: Изучаем STM32 Cortex M3
Какая однако у вас тут специфическая атмосфера на форуме
|
|
|
|
05.05.2017, 12:36
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Да, специфика есть определенная.
Особенно, когда "эти трое" коллективно генерят бред не по теме совершенно. Вернее, уцепились за то, что увидели. i они увидели, понимашь ли. хаха. А если бы там было v, а не i?
Дык в том то и дело, что "эти" видят букву i, но не понимает логики написания программ вообще.
Действительно, "эти" не отличают вызова функции от ее прототипа. Так какая тут еще i, если такие проблемы то? Во-во.
Причем, показательно, что в теме про операционку или езернет "этих" вообще не видно (сказать-то нечего им), а зато про i они сразу же отметились. Как говорится, у кого какие знания, тот в таких темах и участвует
Сообщение от STM32F0
|
которую компилятор не глядя выбрасывает?
|
Где? Кто? Куда выбрасывает? прочти листинг, если разбираешься конечно. Есть она там, ф три инстюхции ажно. Неуч.
Последний раз редактировалось NewWriter; 05.05.2017 в 12:44.
|
|
|
|
05.05.2017, 15:16
|
|
Прописка
Регистрация: 10.03.2016
Сообщений: 114
Сказал спасибо: 14
Сказали Спасибо 46 раз(а) в 41 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от NewWriter
|
Я ранее показывал, что никуда i не выбрасывается.
|
Тема злополучной переменной до конца не раскрыта.
1. Если она не выбрасывается, то куда она девается?
2. Почему int? Почему не char или short int?
3. Почему именно знаковая?
4. Что будет с переменной после переполнения?
5. Как отразится её переполнение на отладке?
6. Что это за отладка, если она никому не знакома? В чём её суть?
7. И как и что можно отлаживать с помощью этой переменной, если компилятор обязательно её выбросит?
|
|
|
|
05.05.2017, 15:44
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от NewWriter
|
Вы не правы. Если бы сами попробовали, то знали бы. Просто так компилятор не выбросит i, нужны веские на то основания. А эти самые "веские основания" в пошаговой отладке неприменимы.
Предлагаю с этим вопросом вам разобраться самостоятельно.
while (1)
{
i++;
20000246: 687b ldr r3, [r7, #4]
20000248: 3301 adds r3, #1
2000024a: 607b str r3, [r7, #4]
} /* while (1) */
|
Вы так самоуверенны... Конечно же я пробовал и даже перед тем, как спрашивать. Потому и спросил - может я чего-то тут не знаю. Это действительно генерируется, но только при выключенной оптимизации (-O0) или если эта i будет объявлена volatile. В остальных случаях её и следа нет, в том числе и при оптимизации -Og.
Кстати, при выключенной оптимизации (-O0) компилятор и while(0) не выкидывает (но выкидывает то, что в нём) - заменяет его на безусловный переход на nop.
Я пробовал на компиляторе gcc-arm-none-eabi-6-2017-q1-update
Так что у меня ответное предложение - не быть настолько самоуверенным.
А вот в том, что gpio_led_f тут:
Код:
|
nt main(void)
{
void gpio_led_f(void);
....
while .... |
не вызывается - Вы правы. И предупреждений тоже нет (кроме того, что нет прототипа для gpio_led_f), хотя на IAR может и не так.
Этого-то я даже не заметил, наверное Ваша i всё внимание отвлекла)))
|
|
|
|
05.05.2017, 15:59
|
|
Вид на жительство
Регистрация: 10.06.2007
Сообщений: 429
Сказал спасибо: 34
Сказали Спасибо 51 раз(а) в 47 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от Den
|
Какая однако у вас тут специфическая атмосфера на форуме
|
Это точно, атмосфера жуткого профессианализма...
А всего-то спросил - для чего нужна переменная i.
https://habrahabr.ru/post/317880/
scorpi_0n, в данном случае все эти пункты можно заменить на один:
1. NewWriter всегда прав.
Ну это судя по тому, как он доказывал, что Сишный компилятор может выкинуть (и выкидывает) while(1);
(кстати, встречал таких преподов, которые всегда правы - ужаснее для образования и придумать сложно).
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:15.
|
|