Технический форум по робототехнике.
galex1981 » 09 май 2009, 12:38
По Ctrl+F9 идет линковка по конкретному МК.
По поводу глобальных переменных - используй их реже.
Еще совет: используй по возможности как можно меньше переменных вообще. То есть если в функции несколько циклов следующих друг за другом, для индекса не 3 объявляй переменных а 1. Ну и аналогично для остального. Памяти будет достаточно для определенных задач
blindman » 09 май 2009, 12:49
hubble писал(а):Что не везде локальную переменную можно использовать так гбе бы, по логике вещей, она должна была бы находиться
Это как?
galex1981 писал(а):есть если в функции несколько циклов следующих друг за другом, для индекса не 3 объявляй переменных а 1. Ну и аналогично для остального.
Компиляторы достаточно сообразительны, чтобы самостоятельно определить время жизни переменной, и в случае с 3 циклами в большинстве случаев будет сгенерирован одинаковый код, что с 1 переменной, что с 3. Причем на расход ОЗУ это тоже мало влияет - локальные переменные в большинстве случаев хранятся в регистрах, а не в ОЗУ. Если конечно не объявлять кучу локальных переменных.
Кстати небольшое замечание по поводу "хватает ОЗУ" : если у контроллера 1024 байта ОЗУ, и компилятор сообщает, что используется 1020 - это еще не значит, что программа работать будет. Не забывайте про стэк.
hubble » 09 май 2009, 13:21
Это как?
Переменную можно прописать в функции и она будет только как локальная. Прописаная вне функции она уже будет глобальной.
Прописав переменную глобальной, наверняка не ошибешься. При этом скушаешь больше ресурсов. Поэтому в пиках я, по возможности, и стараюсь все переменные устоить локальными. С авээркой (может быть это с CodeVision?) это у меня не прошло.
blindman » 09 май 2009, 13:36
Непонятно, что значит "не ошибешься" и "это у меня не прошло"? Ошибешься в чем? Что конкретно не работает? И не мешало бы код показать.
hubble » 09 май 2009, 13:52
To slavaslx:
скорее всего Ваша правда...с массивами.
Поменял const на flash
- Код: Выделить всё • Развернуть
const unsigned char SignNumber_slim[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
........................................
0xe0,0x00,0xe0,0x00,0x00,0x00,0x00,0x00};
- Код: Выделить всё • Развернуть
flash unsigned char SignNumber_slim[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xfd,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
........................................
0xe0,0x00,0xe0,0x00,0x00,0x00,0x00,0x00};
и все откомпилировалось и отлинковалось. И еще больше 60% памяти flash осталось. Просветите, пожалуйста, насчет const и flash. Что и когда правильнее использовать?
Непонятно, что значит "не ошибешься" и "это у меня не прошло"? Ошибешься в чем? Что конкретно не работает?
Да, вроде бы все, кто отвечал, поняли. И, что конкретней, чем было написано, необходимо пояснить?
Но, скорее всего этот вопрос исчерпан. Кроме того, который я задал в этом посте.
Последний раз редактировалось
hubble 09 май 2009, 13:59, всего редактировалось 1 раз.
blindman » 09 май 2009, 13:57
Ну может только для меня он не исчерпан. А может кто-то не понимает разницы между локальными и глобальными переменными. Вот я и пытаюсь прояснить.
hubble » 09 май 2009, 14:01
Прошу прощения за свою не тактичность.
И все же. Если можно, какие-нибудь разъяснения насчет const и flash.
blindman » 09 май 2009, 14:08
hubble писал(а):Прошу прощения за свою не тактичность.
И все же. Если можно, какие-нибудь разъяснения насчет const и flash.
Элементарно. const в соответствии со стандартом языка C - это модификатор, который запрещает изменение переменной после инициализации. Во всем остальном такая переменная не отличается от переменной без этого модификатора. flash - это расширение конкретного компилятора, предписывает размещение переменной в памяти программ. Почему const работала на пике? Наверно там компилятор такие переменные помещает во флэш, хотя это и неправильно.
Теперь твоя очередь

Что же все таки означает вот это :
hubble писал(а):Прописав переменную глобальной, наверняка не ошибешься. При этом скушаешь больше ресурсов. Поэтому в пиках я, по возможности, и стараюсь все переменные устоить локальными. С авээркой (может быть это с CodeVision?) это у меня не прошло.
MiBBiM » 09 май 2009, 14:25
ну и если добавить, то доступ к flash константам медленнее
rig » 09 май 2009, 15:01
к еепром доступ точно медленнее а к флеш вродь такойже
Добавлено спустя 1 минуту 38 секунд:
и если размещать константы в озу то они будут и во флеш и в озу, инициализироваться один фиг из основной программы во флеш , и места как мне кажется займут еще больше
avr123.nm.ru » 17 окт 2009, 16:55
CVAVR CodeVisionAVR 2.04.4a полный но в ознакомительных, учебных целях ...
Ниже !
Последний раз редактировалось
avr123.nm.ru 07 ноя 2009, 13:16, всего редактировалось 1 раз.
pva » 20 окт 2009, 17:34
Последний раз редактировалось
pva 29 окт 2012, 20:50, всего редактировалось 1 раз.
-= Александр =- » 21 окт 2009, 19:16
Нехило! В него включили библиотеку FAT_FS для SD\MMC от ELM-CHANa!

galex1981 » 21 окт 2009, 22:33
Потому что стоящая библиотека!
-= Александр =- » 22 окт 2009, 01:42
А я почти переписал ее сам ручками для CVAVR - так они меня опередили! 