AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
26.07.2015, 21:22
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,002
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,373 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от baiderin
|
можно ?
|
в этом доме попрошу не выражаться! (С) да-с!
|
|
|
|
26.07.2015, 21:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,002
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,373 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от ARTEM277
|
Хочу пример. Если не сложно . Напиши о каких макросах идет речь ?
|
хотят девушки, а мы - ищем клац и читаем хелп студии
|
|
|
|
27.07.2015, 06:38
|
|
Временная регистрация
Регистрация: 24.03.2015
Адрес: Россия. г.Новосибирск
Сообщений: 69
Сказал спасибо: 12
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от jump
|
а мы - ищем клац и читаем
|
За ссылочку конечно спасибо. Но мне ассемблер не интересен. Я пока ,что СИ постигаю. Я не много писал под микрочип на асме. Поэтому принцип работы ассемблера я понимаю. С макросами в ассемблере дело не имел. Как то не доходило.
Начинать споры о том какой язык круче ,бессмысленно. У каждого языка как свои плюсы так и минусы.... Но пока ,что от си я в восторге. Много фишек этого языка я не знаю конечно, но для этого и есть этот форум ,что бы люди делились своими знаниями. Ибо,идущий осилит дорогу... по моему так говорится..
|
|
|
|
27.07.2015, 23:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,002
Сказал спасибо: 0
Сказали Спасибо 4,946 раз(а) в 2,373 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от ARTEM277
|
мне ассемблер не интересен. Я пока ,что СИ постигаю
|
тогда вы не постигнете дзен
Сообщение от ARTEM277
|
Я не много писал под микрочип на асме. Поэтому принцип работы ассемблера я понимаю. С макросами в ассемблере дело не имел
|
тогда вы не понимаете принципов. кстати, погуглите "макросы в С"
|
|
|
|
28.07.2015, 06:51
|
|
Временная регистрация
Регистрация: 24.03.2015
Адрес: Россия. г.Новосибирск
Сообщений: 69
Сказал спасибо: 12
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от jump
|
кстати, погуглите "макросы в С"
|
Конечно я посмотрел. #define это макрос. Я ПРАВИЛЬНО ПОНЯЛ ? Через него я пытался решить проблему описанную мной в 55 посте. Не знаю на сколько правильно я его использовал.
Есть у меня такая ячейка. button_pressed называется .Она 16 битовая. Каждый бит этой ячейки соответствует состоянию кнопки.
То есть операция выглядит как
button_pressed =button_pressed &~(1‹‹0); //кнопка 1 не нажата. Занимает 20 байт
button_pressed =button_pressed |(1‹‹0);//кнопка 1 нажата. Занимает 20 байт.
через define сделал так
#define clr(x) button_pressed =button_pressed &~(1‹‹(x));
#define set(x) button_pressed =button_pressed|(1‹‹(x));
Да удобно оказалось. На будущее буду пользоваться. Но проблему с памятью не решило. Я думал получится некий шаблон. Куда я только подставляю номер бита .Но нет,каждая такая операция занимает set(x) или clr(x) так же 20 байт.
|
|
|
|
28.07.2015, 12:38
|
|
Гражданин KAZUS.RU
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от ARTEM277
|
.Но нет,каждая такая операция занимает set(x) или clr(x) так же 20 байт.
|
Оптимизация включена или нет?
|
|
|
|
28.07.2015, 12:51
|
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от ARTEM277
|
каждая такая операция занимает set(x) или clr(x) так же 20 байт.
|
Так и должно быть. Этот дефайн просто тупо заменяет все set(x) на то, что описано в нём.
Для экономии памяти надо объявить функцию
Код:
|
void set(int x)
{
button_pressed =button_pressed|(1‹‹(x));
} |
Тогда каждый вызов set(x) будет занимать меньше 20 байтов в памяти. При большом количестве вызовов это позволит существенно сэкономить памяти по сравнению с #define.
|
|
|
Сказали "Спасибо" Yurkin2014
|
|
|
03.08.2015, 12:07
|
|
Временная регистрация
Регистрация: 24.03.2015
Адрес: Россия. г.Новосибирск
Сообщений: 69
Сказал спасибо: 12
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от _Артём_
|
Оптимизация включена или нет?
|
Да включена. -Os
При ней самый маленький код получается.
|
|
|
|
03.08.2015, 12:09
|
|
Временная регистрация
Регистрация: 24.03.2015
Адрес: Россия. г.Новосибирск
Сообщений: 69
Сказал спасибо: 12
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от Yurkin2014
|
Для экономии памяти надо объявить функцию
Код:
void set(int x)
|
А вот это я попробую. Я делал ,что то подобное... Но вариантов у меня было уже столько перебрано ,что я и забыл,делал я так или нет....
|
|
|
|
05.08.2015, 11:21
|
|
Временная регистрация
Регистрация: 24.03.2015
Адрес: Россия. г.Новосибирск
Сообщений: 69
Сказал спасибо: 12
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите советом ATmega8535
Сообщение от Yurkin2014
|
Код:
void set(int x)
{
button_pressed =button_pressed|(1‹‹(x));
}
|
Попробовал. И вспомнил ,что я так уже делал. Отказался от этого ,потому ,что
при применение этого метода программа (на данном этапе ) становится на 92 байта больше, но при этом больше не увеличивается,что радует . Метод очень хорош ,но не в моем случае наверное уже. На будущее возьму его на вооружение ...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:30.
|
|