Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
18.09.2006, 18:42
|
|
Прописка
Регистрация: 29.08.2005
Сообщений: 139
Сказал спасибо: 7
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Массивы в PICC_V8.05PL1
PICC_V8.05PL1 ругается на следующие массивы:
static unsigned char *s[] = {
"║po╪╨oc©д dB",
"╘c╦╩e╫╦e dB",
"Te╪╡p H╚ dB",
"Te╪╡p B╚ dB",
"═a╩a╫c ╙p. dB",
"═a╩a╫c Tц╩ dB" };
static signed char x[6][16] = {
{ -78,-65,-55,-45,-40,-35,-30,-25,-20,-17,-14,-11,-8,
-5,-2,0 },
{ 0,0,0,0,6,6,6,6,12,12,12,12,18,18,18,18 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -37,-25,-15,-10,-7,-5,-2,0,0,2,5,7,10,15,25,37 }
{ -37,-25,-15,-10,-7,-5,-2,0,0,2,5,7,10,15,25,37 } };
это глюк или компилятор их не поддерживает?
|
|
|
|
18.09.2006, 23:03
|
|
Гражданин KAZUS.RU
Регистрация: 16.12.2004
Сообщений: 587
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
|
Re: Массивы в PICC_V8.05PL1
Сообщение от vovan_zh
|
PICC_V8.05PL1 ругается на следующие массивы:
static unsigned char *s[] = {
"║po╪╨oc©д dB",
"╘c╦╩e╫╦e dB",
"Te╪╡p H╚ dB",
"Te╪╡p B╚ dB",
"═a╩a╫c ╙p. dB",
"═a╩a╫c Tц╩ dB" };
static signed char x[6][16] = {
{ -78,-65,-55,-45,-40,-35,-30,-25,-20,-17,-14,-11,-8,
-5,-2,0 },
{ 0,0,0,0,6,6,6,6,12,12,12,12,18,18,18,18 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -37,-25,-15,-10,-7,-5,-2,0,0,2,5,7,10,15,25,37 }
{ -37,-25,-15,-10,-7,-5,-2,0,0,2,5,7,10,15,25,37 } };
это глюк или компилятор их не поддерживает?
|
А чего бы ему не ругаться!
Начнём с 2:
static signed char x[6][16] = {
{ -78,-65,-55,-45,-40,-35,-30,-25,-20,-17,-14,-11,-8,
-5,-2,0 },
{ 0,0,0,0,6,6,6,6,12,12,12,12,18,18,18,18 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -14,-12,-10,-8,-6,-4,-2,0,0,2,4,6,8,10,12,14 },
{ -37,-25,-15,-10,-7,-5,-2,0,0,2,5,7,10,15,25,37 },‹-
{ -37,-25,-15,-10,-7,-5,-2,0,0,2,5,7,10,15,25,37 } };
запятую забыл, компилятор 2 строки и не разобрал
теперь 1:
static unsigned char *s[] = {
"║po╪╨oc©д dB",
"╘c╦╩e╫╦e dB",
"Te╪╡p H╚ dB",
"Te╪╡p B╚ dB",
"═a╩a╫c ╙p. dB",
"═a╩a╫c Tц╩ dB" };
тута ваабще караул! как Вы можете указателю присвоить значение набора строк разной длины? Им же надо место
static unsigned char s1[] = "║po╪╨oc©д dB";
static unsigned char s2[] = "╘c╦╩e╫╦e dB";
static unsigned char s3[] = "Te╪╡p H╚ dB";
static unsigned char s4[] = "Te╪╡p B╚ dB";
static unsigned char s5[] = "═a╩a╫c ╙p. dB";
static unsigned char s6[] = "═a╩a╫c Tц╩ dB";
static unsigned char *s[] = { s1,s2,s3,s4,s5,s6 };
Не обижайтесь! Попробуйте вот так.
Я тоже мечтал об AnsiString в IAR.
Желаю успеха!
|
|
|
|
18.09.2006, 23:57
|
|
Прописка
Регистрация: 29.08.2005
Сообщений: 139
Сказал спасибо: 7
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Обижаться мне не на что, так как всегда прислушиваюсь к мнению знающих людей, для того и вопрос сюда задал (в Си начинающий) .
Запятая затералась при редактировании сообщения.
Обязательно опробую ваши рекомендации.
Еще рекомендовали заменить static на const, чтоб массив распределился в пзу мк, так как одного банка ПИКа нехватает.
p.s. перевожу исходник с рабочей версии написаной для WinAVR.
|
|
|
|
19.09.2006, 00:06
|
|
Прописка
Регистрация: 29.08.2005
Сообщений: 139
Сказал спасибо: 7
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Re: Массивы в PICC_V8.05PL1
Сообщение от NemoCut32
|
тута ваабще караул! как Вы можете указателю присвоить значение набора строк разной длины?
|
Тут я поспешил и был невнимателен, было так:
static unsigned char *s[] = {
"ЎpoјєocїД dB",
"©cё»eЅёe dB",
"TeјІp H« dB",
"TeјІp B« dB",
"*a»aЅc Єp. dB",
"*a»aЅc TГ» dB" };
что то форум не позволяет, короче размер строк выровнен пробелами
|
|
|
|
20.09.2006, 23:02
|
|
Гражданин KAZUS.RU
Регистрация: 16.12.2004
Сообщений: 587
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
|
Тогда точно должно прокатить вот так:
static const unsigned char s[][14] = {
"ЎpoјєocїД dB ",
"©cё»eЅёe dB ",
"TeјІp H« dB ",
"TeјІp B« dB ",
" a»aЅc Єp. dB",
" a»aЅc TГ» dB" };
static - просто ограничивает область видимости переменной (константы) текущим модулем, если в других модулях переменная не используется - пишите static.
А что с запятой?
|
|
|
|
20.09.2006, 23:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сообщение от NemoCut32
|
static - просто ограничивает область видимости переменной (константы) текущим модулем, если в других модулях переменная не используется - пишите static.
|
чем писать такую ахинею! почитайте лучше что такое
static
в книгах по Си или там: avr123.nm.ru/05a.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
21.09.2006, 00:19
|
|
Гражданин KAZUS.RU
Регистрация: 16.12.2004
Сообщений: 587
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
|
Перевод у Вас конечно правильный, но тогда я бы добавил, что статические переменные и отличаются статическим выделением памяти (а не динамическим, как локальные). А вот как же с глобальными? А?
Я так понимаю, что static по сути ограничивает область видимости тем модулем, где используется - объявление в функции, значит функция; объявление модуль, значит модуль, объявите в цикле - значит этот цикл. Точто статическое объявлнение будет постоянно хранить значение верно, но покажите мне константу (или функцию), которая динамически изменяется. Это конечно можно и функцию в раме поменять и константу во флэшь переписать умеючи, но умеючи (или с дуру)можно и ещё кой чего сломать.
Так что если vovan_zh объявляет константу и она ни где боле не юзается, да + лежит во флешке пусть и объявит статик - такая военная хитрость. Зато при компиляции проекта, если где выползет такое имя где не надо - компилятор даст ошибку. Вы тоже поди на warning внимание не особо обращаете.
|
|
|
|
21.09.2006, 11:10
|
|
Прописка
Регистрация: 29.08.2005
Сообщений: 139
Сказал спасибо: 7
Сказали Спасибо 5 раз(а) в 5 сообщении(ях)
|
Сообщение от NemoCut32
|
Так что если vovan_zh объявляет константу и она ни где боле не юзается, да + лежит во флешке пусть и объявит статик - такая военная хитрость.
|
Я не знаю как в других компиляторах, но как мне объяснили на микрочипе, при обявлении static - компилятор размещает массив в озу (ругался потому что в одном банке пика не достаточно места), а при замене на const массив кладется во флеш. И у меня все заработало( To NemoCut32: запятая потерялась при редактировании сообщения).
Ксати, а как в этом плане дела обстоят в компиляторах для АВР, где размещаются переменые static и где const?
|
|
|
|
21.09.2006, 11:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
Сообщение от NemoCut32
|
Перевод у Вас конечно правильный, .
|
я не переводил а "сочинение" по памяти писал.
Сообщение от NemoCut32
|
Я так понимаю, что static по сути ограничивает область видимости тем модулем, где используется
|
Нет ! там же ясно написано - видимость определяется ТОЛЬКО тем где объявлена переменная !
а СТАТИК говорит компилу чтоб содержимое переменной сохранялось между вызовами функции.
СТАТИК писать к глобальной переменной бессмысленно так как они и так хранятся ВЕЧНО !
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
23.09.2006, 00:24
|
|
Гражданин KAZUS.RU
Регистрация: 16.12.2004
Сообщений: 587
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
|
Уважаемый avr123-nm-ru, а я Вам что пишу. Тоже самое.
Но тема поднята серьёзная, во многих случаях в описании языков, как C, так других, нет точного объяснения что и зачем + возможны разные трактовки. Если avr123-nm-ru проффесионал, то это не значит, что он на все 100% обязан знать всю историю и ДОТОШНО объяснять каждую мелочь. Уверен уж он точно знает что и где использовать хотя бы в виду огромного практического опыта. Но что делать новичкам? Мне многоуважаемый avr123-nm-ru Ваш сайт (как впрочем и начинание) понравился, правда не расцветкой (дизайнера не могли найти), а содержанием. Однако это не решает проблемы у vovan_zh оказалась проблема распределения памяти, кстати описано это только в доке на компилятор в применении к конкретной платформе. Хотелось бы где нибудь увидеть описание такой специфики.
поэтому есть три предложения:
1) Организаторам сайта - создать принципиально новую ветку форума: Для НОВИчКОВ!, где будут обсуждаться подобные вопросы. Минимум помогут старшие, аесли есть желание найдёте всё в книжках. Сайт и так славится тем, что в форумах даёт ответы на множество вопросов и помогает молодёже становиться на ноги(возмложно она отплатит тем же).
2) vovan_zh просьба написать, что получилось с моими советами по поводу *s[], в ответ: в разных компиляторах по разному, но изначально: static - объявление переменных и констант расположенных в памяти ПОСТОЯННО, const - объявление НЕИЗМЕНЯЕМЫХ переменных. Далее у разных процессоров и архитектур есть разные методы расположения этих данных, например если Вы напишете const в AVR IAR, то он просто выделит в ОЗУ место гад, далее из флэшь при старте проинициализирует эту память (займёт место и там и там) но с этими данными будет работать как с памятью (str, ldr), а если Вы объявите данные как flash, то он их разместит только во флэшке и будет работать с ними через lpm.
З.Ы. Уважаемый avr123-nm-ru! Если интересно подискутировать, то напиште в личку. Не будем загрязнять форум и вводить в непонятки новичков. Брань не делает престижа ни кому.
Всем Удачи! Тьфу, теперь говорят ВСЕМ РЕСПЕКТ!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
массивы в АВР
|
Limit |
Микроконтроллеры, АЦП, память и т.д |
9 |
02.05.2006 13:55 |
Часовой пояс GMT +4, время: 15:16.
|
|