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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> flash память, простые действия с памятью
laryc
сообщение Feb 20 2017, 14:22
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 1-01-10
Из: комсомольск на амуре
Пользователь №: 54 586



Добрый писать и День! Нигде не могу найти подходящую информацию как и извлекать информацию из флешь памяти (есть такая насущность) в IAR.
На ассемблере таких проблем почемуто не возникало.

#include <pgmspace.h>
.......................

unsigned char tt;
const char __flash Sound[3] = {0,1,2};

...включаем компилятор - всё ОК!
..........
далее хочу взять константу из flash ... пишу

tt = Sound[2]; ( .....пробовал _flash Sound[3] ..и по всякому менял синтаксис)

компилятор выдаёт ошибку:

Ошибка [Pe077]: эта декларация не имеет класса хранения или спецификатор типа
Ошибка [Pe147]: декларация несовместима с "неподписанные символ ТТ"
Ошибка [Pe028]: выражение должно иметь постоянное значение


--------------------
никогда не бывает так плохо чтобы небыло ещё хуже
Go to the top of the page
 
+Quote Post
amiller
сообщение Feb 20 2017, 14:37
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612



Вам надо было указать платформу, для которой пытаетесь писать.
Насколько помню, объявления в IAR различаются в зависимости от платформы.
Для STM32 и STM8 достаточно написать:
const char Sound[3] = {0,1,2};
А для AVR нужно:
__flash const char Sound[3] = {0,1,2};
У вас вероятно нарушен правильный порядок объявления.
А обращение во всех случаях одинаково:
tt = Sound[2];
Go to the top of the page
 
+Quote Post
laryc
сообщение Feb 20 2017, 14:51
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 55
Регистрация: 1-01-10
Из: комсомольск на амуре
Пользователь №: 54 586



исправил... платформа IAR AVR 6.12

char tt;
__flash const char Sound[] = {0,1,2};

tt = Sound[2];
компилируем имеем

Error[Pe077]: this declaration has no storage class or type specifier C:\pistol\main.h 14
Error[Pe147]: declaration is incompatible with "char tt" (declared at line 11) C:\pistol\main.h 14
Error[Pe028]: expression must have a constant value C:\pistol\main.h 14
Error while running C/C++ Compiler
Total number of errors: 3

Три ошибки в слове х..... многовато даже для двоешника


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


одну ошибку извел объявив переменную int

__flash const char Sound = 6;
int tt;
tt = Sound;


имеем

Error[Pe077]: this declaration has no storage class or type specifier C:\pistol\main.h 14
Error[Pe028]: expression must have a constant value C:\pistol\main.h 14
Error while running C/C++ Compiler

Total number of errors: 2
Total number of warnings: 0



Сообщение отредактировал laryc - Feb 20 2017, 15:22


--------------------
никогда не бывает так плохо чтобы небыло ещё хуже
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 20 2017, 16:23
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (laryc @ Feb 20 2017, 16:51) *
Три ошибки в слове х..... многовато даже для двоешника
Простите, а вы на ассемблере тоже команды писали в любой файл в любое место? Попробуйте так:
файл main.c
CODE
__flash const char Sound[] = {0,1,2};
void main()
{
     char tt = Sound[2];
}
И если это сработает - читайте букварь по языку Си.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k155la3
сообщение Feb 23 2017, 15:04
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Обратите внимание на "коварность" (в хорошме смысле) оптимизатора IAR.
Если ОН обнаружит что некая переменная на ЕГО взгляд не используется,
то код для ее "обслуживания" вполне может не сгенерироваться.
Отключайте в отладке оптимизацию.

ps - если есть атрибут в версии AVR IAR __root - попробуйте его.
Смотрите распределение памяти в map-файле.

Сообщение отредактировал k155la3 - Feb 23 2017, 15:06
Go to the top of the page
 
+Quote Post
Obam
сообщение Feb 23 2017, 15:45
Сообщение #6


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Цитата(k155la3 @ Feb 23 2017, 19:04) *
Обратите внимание на "коварность" (в хорошме смысле) оптимизатора IAR.
Если ОН обнаружит что некая переменная на ЕГО взгляд не используется,
то код для ее "обслуживания" вполне может не сгенерироваться.
Отключайте в отладке оптимизацию.

ps - если есть атрибут в версии AVR IAR __root - попробуйте его.
Смотрите распределение памяти в map-файле.


А от себя добавлю, даже с отключенной оптимизацией гарантирует наличие чего-либо "__required"


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 23 2017, 18:51
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (k155la3 @ Feb 23 2017, 17:04) *
Отключайте в отладке оптимизацию.
Простите за прямоту, но это вредный, если не сказать грубее, совет. Вместо прятанья головы в песок путем отключения оптимизации надо разбираться, почему именно оптимизированный код делает не то, что хотел программист. Практика показывает, что в подавляющем большинстве случаев причина в недостаточной квалификации программиста и решение таких проблем эту квалификацию повышает.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k155la3
сообщение Feb 24 2017, 07:02
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Сергей Борщ @ Feb 23 2017, 21:51) *
Простите за прямоту, но это вредный, если не сказать грубее, совет.

Разбираться, почему не работает оптимизированный код - сильно укрепляет мозг, но не все готовы на такие жертвы sm.gif
В идеале - надо идеально знать процессор, компилятор, язык программирования и ошибок не допускать.
А на "старте", в том числе для изучения оптимизатора - можно использовать вышеуказанный способ. IMHO.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 24 2017, 08:14
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (k155la3 @ Feb 24 2017, 09:02) *
А на "старте", в том числе для изучения оптимизатора - можно использовать вышеуказанный способ. IMHO.
Хорошо, отключили вы оптимизацию, как бы отладили программу, включили оптимизацию - программа не работает. И что толку от потраченного на эту отладку времени? Какие следующие действия неокрепшего мозга? А я вам скажу: "Аааа!!!! Компилятор глючит! Отдадим в производство программу без оптимизации и надо всем советовать писать программы с выключенной оптимизацией!"

В конце концов программированием занимаются не первокласники, которым на старте проще сказать "на ноль делить нельзя".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Obam
сообщение Feb 24 2017, 10:17
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



По поводу main{} присоединяюсь: ТС троллить пытается...

Цитата(Сергей Борщ @ Feb 24 2017, 12:14) *
Хорошо, отключили вы оптимизацию, как бы отладили программу, включили оптимизацию - программа не работает. И что толку от потраченного на эту отладку времени?

И вот тут правильный новичок начнёт разбираться что да как, но имея в качестве соломки, да пусть неоптимизированный, но работающий код.
И ко второму проекту правильный шеф получит молодого специалиста (:

Цитата
В конце концов программированием занимаются не первокласники, которым на старте проще сказать "на ноль делить нельзя".


До первого курса универа, пока пределы и неопределённости не введены как понятие, да - "на ноль делить нельзя"; и в контроллерах, пока обработчик исключения (если есть это исключение) не прописан - не стоит (читай - нельзя) (;


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 24 2017, 13:19
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Obam @ Feb 24 2017, 12:17) *
И вот тут правильный новичок начнёт разбираться что да как
Правильный начал бы разбираться сразу, не отключая оптимизацию.

Честное слово, напоминает ситуацию - "ищи под фонарем, там светлее".


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Feb 24 2017, 15:06
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(k155la3 @ Feb 24 2017, 09:02) *
Разбираться, почему не работает оптимизированный код - сильно укрепляет мозг, но не все готовы на такие жертвы sm.gif

Сергей прав - если так замазали проблему, не найдя причину ошибки, то она всё равно после вылезет ещё и ещё, или с оптимизацией или без.
Только потом найти её причину будет в разы сложнее и дольше.
А если постоянно так делать, то весь код превратиться в одно сплошное глюкалово.
Как только такой баг вылез - надо сразу искать его причину и не убирать оптимизацию, а наоборот - зафиксировать условия, при которых он стабильно проявляется.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Feb 24 2017, 15:41
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(k155la3 @ Feb 24 2017, 09:02) *
Разбираться, почему не работает оптимизированный код - сильно укрепляет мозг, но не все готовы на такие жертвы sm.gif

Невозможно укреплять то, чего нет sad.gif. Увы sad.gif



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Feb 25 2017, 08:55
Сообщение #14


Гуру
******

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



А я просто ещё раз напомню, что оптимизация требуется редко. Обычно всё работает и без неё, и памяти тоже хватает.
Вы же предлагаете использовать оптимизацию не по прямому назначению, а с целью вытряхнуть из кода некий класс глюков. Интересная концепция, конечно, но немного спорная laughing.gif
Go to the top of the page
 
+Quote Post
k155la3
сообщение Feb 27 2017, 07:48
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(jcxz @ Feb 24 2017, 18:06) *
Сергей прав - если так замазали проблему, не найдя причину ошибки, то она всё равно после вылезет ещё и ещё, или с оптимизацией или без.
Только потом найти её причину будет в разы сложнее и дольше.
А если постоянно так делать, то весь код превратиться в одно сплошное глюкалово.
Как только такой баг вылез - надо сразу искать его причину и не убирать оптимизацию, а наоборот - зафиксировать условия, при которых он стабильно проявляется.

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

Go to the top of the page
 
+Quote Post

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

 


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


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