|
flash память, простые действия с памятью |
|
|
|
Feb 20 2017, 14:22
|

Участник

Группа: Участник
Сообщений: 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]: выражение должно иметь постоянное значение
--------------------
никогда не бывает так плохо чтобы небыло ещё хуже
|
|
|
|
|
Feb 20 2017, 14:51
|

Участник

Группа: Участник
Сообщений: 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
--------------------
никогда не бывает так плохо чтобы небыло ещё хуже
|
|
|
|
|
Feb 20 2017, 16:23
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Feb 23 2017, 18:51
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Feb 24 2017, 07:02
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(Сергей Борщ @ Feb 23 2017, 21:51)  Простите за прямоту, но это вредный, если не сказать грубее, совет. Разбираться, почему не работает оптимизированный код - сильно укрепляет мозг, но не все готовы на такие жертвы  В идеале - надо идеально знать процессор, компилятор, язык программирования и ошибок не допускать. А на "старте", в том числе для изучения оптимизатора - можно использовать вышеуказанный способ. IMHO.
|
|
|
|
|
Feb 24 2017, 08:14
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Feb 24 2017, 10:17
|

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

|
По поводу main{} присоединяюсь: ТС троллить пытается... Цитата(Сергей Борщ @ Feb 24 2017, 12:14)  Хорошо, отключили вы оптимизацию, как бы отладили программу, включили оптимизацию - программа не работает. И что толку от потраченного на эту отладку времени? И вот тут правильный новичок начнёт разбираться что да как, но имея в качестве соломки, да пусть неоптимизированный, но работающий код. И ко второму проекту правильный шеф получит молодого специалиста (: Цитата В конце концов программированием занимаются не первокласники, которым на старте проще сказать "на ноль делить нельзя". До первого курса универа, пока пределы и неопределённости не введены как понятие, да - "на ноль делить нельзя"; и в контроллерах, пока обработчик исключения (если есть это исключение) не прописан - не стоит (читай - нельзя) (;
--------------------
Пролетарий умственного труда.
|
|
|
|
|
Feb 24 2017, 13:19
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Feb 24 2017, 15:06
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(k155la3 @ Feb 24 2017, 09:02)  Разбираться, почему не работает оптимизированный код - сильно укрепляет мозг, но не все готовы на такие жертвы  Сергей прав - если так замазали проблему, не найдя причину ошибки, то она всё равно после вылезет ещё и ещё, или с оптимизацией или без. Только потом найти её причину будет в разы сложнее и дольше. А если постоянно так делать, то весь код превратиться в одно сплошное глюкалово. Как только такой баг вылез - надо сразу искать его причину и не убирать оптимизацию, а наоборот - зафиксировать условия, при которых он стабильно проявляется.
|
|
|
|
|
Feb 27 2017, 07:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

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