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

 
 
> Как сделать чтоб часть кода кампилятор не оптимизировал.
alexdos
сообщение Dec 16 2013, 23:49
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Компилятор Kei.
В флеш памяти по определенному адресу хранится константа
Код
const char dp_E  __attribute__((at(0x0800FCB0))) = {'N'};

В теле программы есть где она опрашивается и принимается решение
Код
if (dp_E ==  'Y')  set_dp();

В другой части кода есть возможность её поменять, так вот после её смены на 'Y' код не видит что она поменялась, и продолжает пропускать set_dp();
Если же написать
Код
volatile const char dp_E  __attribute__((at(0x0800FCB0))) = {'N'};
то всё работает как нужно, но выскакивает предупреждение
Код
Warning: L6969W: Changing AT Section .ARM.__AT_0x0800FCB0 type from RW to RO in ER_IROM1.

Подскажите неучу, как правильно сделать чтоб работало и не было предупреждений.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
fatlortroll
сообщение Dec 17 2013, 05:52
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 16-08-13
Из: Ставрополь
Пользователь №: 77 934



Скопируй ту переменную в оперативку, и изменяй её, как хочешь. И, кстати, используется встроенная flash-память контроллера, как я понимаю? Она, разве, позволяет изменять данные меньше, чем страницей?
Go to the top of the page
 
+Quote Post
alexdos
сообщение Dec 17 2013, 06:53
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(fatlortroll @ Dec 17 2013, 08:52) *
Скопируй ту переменную в оперативку, и изменяй её, как хочешь. И, кстати, используется встроенная flash-память контроллера, как я понимаю? Она, разве, позволяет изменять данные меньше, чем страницей?

Это конфигурационная константа, после сброса она должна остаться в последнем состоянии. Копировать константу в ОЗУ, чтоб там использовать, на моё мнение это лишнее телодвижение. Да, данные меняются страницей. За "жизнь" устройства эти данные могут измениться несколько раз, а могут и вовсе не изменяться.

Цитата(alexeyv @ Dec 17 2013, 07:11) *
убери const

Убирание const ситуацию не изменило, предупреждение выскакивает по прежнему.
Go to the top of the page
 
+Quote Post
scifi
сообщение Dec 17 2013, 06:54
Сообщение #4


Гуру
******

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



Я бы не заморачивался с attribute, а сделал бы обычный указатель:
Код
char volatile* const dp_E = (char volatile*)0x0800FCB0;


Update: добавил const
Go to the top of the page
 
+Quote Post
alexdos
сообщение Dec 17 2013, 07:21
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 339
Регистрация: 10-07-08
Из: Херсон
Пользователь №: 38 856



Цитата(scifi @ Dec 17 2013, 09:54) *
Я бы не заморачивался с attribute, а сделал бы обычный указатель:
Код
char volatile* const dp_E = (char volatile*)0x0800FCB0;


Update: добавил const


Вот так работает, с начальной инициализацией. Ошибок и предупреждений нет.
Код
const char Init_dp_E  __attribute__((at(0x0800FCB0)))  = {'N'};
char volatile* const dp_E = (char volatile*)0x0800FCB0;

if (*dp_E == 'Y')  set_dp();


Сообщение отредактировал alexdos - Dec 17 2013, 07:29
Go to the top of the page
 
+Quote Post



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

 


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


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