реклама на сайте
подробности

 
 
> Оптимизация в Keil
Arlleex
сообщение Jul 21 2015, 18:24
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Всем привет!
Использую Keil 5 для программирования STM32.
Заметил интересную особенность. Выключаю оптимизацию (Level 0), запускаю код, в нем все прозрачно и безобидно - выделяется в функции локальная структура, и я ее заполняю. Выхожу из функции в main, захожу в другую функцию и отладчик отваливается с сообщением

Путем проб и ошибок выявил, что, закомментировав одно из заполнений полей структуры,
Код
struct.a = 0;
struct.b = 100;
struct.c = 45;
// struct.d = 50;
struct.e = 150;

все работает. Т.е. поймал багу прямо на строчке заполнения структуры. Если перед объявлением структуры объявить еще что-нибудь, баг тоже исчезает... Подобного никогда не видел. При оптимизации Level 3 все работает, даже при заполнении всех полей структуры. Что там натворил оптимизатор такого?
P.S. И еще вопрос. Почему при оптимизации Level 0
Код
volatile const unsigned int a = 100;

разместится в SRAM, а если она объявлена но не используется по коду - выкидывается вовсе из map-файла (ведь Level 0 предполагает ничего не оптимизировать)? Если просто
Код
const unsigned int a = 100;

то все хорошо - константа будет во Flash.
Для Level 3 вроде как оба случая разместят константу во Flash.
Объясните, пожалуйста, или направьте на нужную информацию.

Сообщение отредактировал Arlleex - Jul 21 2015, 18:25
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
diwil
сообщение Jul 21 2015, 18:54
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 366
Регистрация: 5-09-06
Из: Санкт-Петербург
Пользователь №: 20 107



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

а размещение это не компилер, это линкер...
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 21 2015, 19:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(diwil @ Jul 21 2015, 21:54) *
не совсем понимаю как воспринимать константу, которая _изменяется_ неизвестным компилеру способом...

Слово "константа" здесь может ввести в заблуждение. Точнее будет "переменная, которой нельзя присвоить значение в программе". Значение всё равно может измениться: например, регистр датчика температуры.

Цитата(Arlleex @ Jul 21 2015, 21:24) *
Путем проб и ошибок выявил, что, закомментировав одно из заполнений полей структуры,
...
все работает.

Это не очень интересно. Гораздо интереснее будет, если удастся найти участок кода, при выполнении которого всё падает. Если по шагам не получается, то нужно ставить точку останова и двигать её, пока глюк не появится/пропадёт.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Arlleex   Оптимизация в Keil   Jul 21 2015, 18:24
- - Fedor   Больше похоже на то что в камень заливается не то ...   Jul 21 2015, 18:42
|- - Arlleex   Пересобирал, чего-только не пересобирал. Думал, фл...   Jul 21 2015, 18:49
- - aaarrr   Цитата(Arlleex @ Jul 21 2015, 21:24) отла...   Jul 21 2015, 19:02
- - Arlleex   aaarrr, пардон. Отладчик отваливается с сообщением...   Jul 21 2015, 19:11
- - Arlleex   Покажу на псевдокоде. Кодint main(void) {...   Jul 21 2015, 19:32
|- - Fedor   Если структуру struct s; объявить глобальной или ...   Jul 21 2015, 19:42
||- - Arlleex   Fedor, глобальной - не отваливается. Статической -...   Jul 21 2015, 19:46
|- - scifi   Цитата(Arlleex @ Jul 21 2015, 22:32) Само...   Jul 21 2015, 19:54
- - Arlleex   К сожалению, я шагал не по ассемблеровским инструк...   Jul 21 2015, 19:56
- - Golikov A.   у меня глупый, возможно, вопрос. А у вас какой ко...   Jul 22 2015, 06:24
- - kolobok0   Цитата(Arlleex @ Jul 21 2015, 21:24) ...И...   Jul 22 2015, 07:21
- - Arlleex   Golikov A., вопросы не бывают глупыми, вопросы быв...   Jul 22 2015, 18:56
|- - kolobok0   Цитата(Arlleex @ Jul 22 2015, 21:56) ...в...   Jul 23 2015, 09:45
- - Golikov A.   А никаких модулей защиты памяти и прочей байды слу...   Jul 23 2015, 05:26
- - Booger   Добрый день! Не стал создавать новую тему. Воп...   Feb 5 2016, 12:44
|- - scifi   Цитата(Booger @ Feb 5 2016, 15:44) Может ...   Feb 5 2016, 13:15
- - vlad_new   Я не раз нарывался на проблеммы с оптимизатором в ...   Feb 7 2016, 00:24
|- - scifi   Цитата(vlad_new @ Feb 7 2016, 03:24) Я не...   Feb 7 2016, 06:45
- - ViKo   Я считаю, что работоспособность программы при любы...   Feb 7 2016, 05:58
|- - zltigo   QUOTE (ViKo @ Feb 7 2016, 07:58) Я считаю...   Feb 7 2016, 06:42
|- - ViKo   Цитата(zltigo @ Feb 7 2016, 09:42) Именно...   Feb 7 2016, 08:38
|- - scifi   Цитата(ViKo @ Feb 7 2016, 11:38) Иногда в...   Feb 7 2016, 09:11
|- - zltigo   QUOTE (ViKo @ Feb 7 2016, 10:38) Иногда в...   Feb 7 2016, 09:37
- - RabidRabbit   На выравнивание pdwVal смотрите. Возможно при O0 к...   Feb 8 2016, 03:51
- - Booger   В том то и дело, товарищи! Работает на всех ур...   Feb 8 2016, 04:14
- - Сергей Борщ   Смею предположить, что с включенной оптимизацией к...   Feb 8 2016, 05:44
- - Booger   Спасибо всем за помощь! Действительно, если и...   Feb 9 2016, 05:30
- - GetSmart   В 4-ом Кейле (точнее не скажу) для ARM7 таргета ви...   Feb 9 2016, 22:20


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 02:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016