Но тогда одинаково получается - что инкремент, что декремент, у CvAvr получается SUBI. А вот борландовский компилятор убирать ненужное в приращении счетчика (i++) "mov axe,i" не умел, и у многих других компиляторов, при использовании постфиксного ин-/де-кремента, предыдущее значение переменной сохранялось в аккумуляторе. С тех пор я привык операции со счетчиками (но не с индексами) делать только префиксными.
WinAVR видать тоже не умеет нормально инкремент делать, приходится делать через одно место Как и куча всяких странных ситуаций когда происходит непонятное падение производительности.
_________________ Where technology meets enjoyment.
При изменениии обьемов Flash растет и количество RAM, это позволяет не так сильно оптимизировать код при изучении ARMов, плюс надо учитывать то что проц 32 разрядный, обьем кода будет больше чем у восьмибитников. Так что имхо лучше взять побольше, темболее цены не так сильно растут при изменении размеров флеши. Если решите брать AT91SAM7S32 берите лучше AT91SAM7S321 у него есть USB и портов больше. Кстати в STM32F103RET6 обьем флеши 512кб и 64кб RAM, плюс флеш быстрее чем у атмеля. Пока он мне больше всех армов нравится, правда архитектура новая у него, и режим thumb2 вместо старых ARM и Thumb режимов у ARM7.
_________________ Where technology meets enjoyment.
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
neonix писал(а):
При изменениии обьемов Flash растет и количество RAM, это позволяет не так сильно оптимизировать код при изучении ARMов, плюс надо учитывать то что проц 32 разрядный, обьем кода будет больше чем у восьмибитников. Так что имхо лучше взять побольше, темболее цены не так сильно растут при изменении размеров флеши. Если решите брать AT91SAM7S32 берите лучше AT91SAM7S321 у него есть USB и портов больше. Кстати в STM32F103RET6 обьем флеши 512кб и 64кб RAM, плюс флеш быстрее чем у атмеля. Пока он мне больше всех армов нравится, правда архитектура новая у него, и режим thumb2 вместо старых ARM и Thumb режимов у ARM7.
Дык в Thumb наборе команд у него должно в два раза меньше памяти хаваться под командный код, ну а разрядность переменных сам задаёшь. Кстати, AT91SAM7S32 действительно сильно "кастрированный" в плане периферии. А никто не интересовался ARM9ми? В большинстве корейских мобилок именно они 320х240 экранами крутят...
STM32F103 режим Thumb 2 (чтото среднее между ARM и Thumb режимами ARM7).
Дык ARM9 недорогих , и в паябельных корпусах не встречал как то. У Атмела есть парочку у STM видел и все.
_________________ Where technology meets enjoyment.
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Всем! Помогите, пожалуйста в глупом вопросе - купил на выходных экран от C65 LPH9135-3 002 0.4mm G6042062 40грн отдал (сдуру перепутал с S65), не могу найтина него даташит. Есть у кого-нибудь описание, коды или лучше не связываться и отпереть на базар обратно?
Спасибо за либу Антибиотик. Подключил дисплей с ls020 на борту. батарейка отображжается все остальное каракули. Полностью убираю картинки, пробую напечатать текст выдает одну каракулю и все на этом. причем при перезапусках МК, каждый раз область видимости каракули меняется... В чем может быть дело?
Всем! Помогите, пожалуйста в глупом вопросе - купил на выходных экран от C65 LPH9135-3 002 0.4mm G6042062 40грн отдал (сдуру перепутал с S65), не могу найтина него даташит. Есть у кого-нибудь описание, коды или лучше не связываться и отпереть на базар обратно?
Решил перевести библиотеку для L2F50 с WINAVR на CVAVR ,вроде совсем разобрался но вот непонятно в коде winavr-оском что делает:
for (i=0; i<9; i++)
{
lcd_dat0(pgm_read_byte(&disctl[i]));
}
вроде все просто при прохождении цикла увеличивает значение его и переходит на следующий челен массива и отправляет эти значения в функцию lcd_dat0, но непонятно что в winavr делает pgm_read_byte.
И в функции вывода массива на дисплей unsigned char bmp_x = pgm_read_word(data++);//Размер по X , непонятно что делает pgm_read_word .
Подскажите как это записать под cvavr больше сложнайстей с переходом не возникло…
По вашей ссылке нужно пройти регестрацию с одобрение админа=)
Попробал иницилизирвоать без pgm_read_byte тупо из масива выплевыпать в спи , есть результаты но чтото все медлено работает вомного рас ,также есть подтупливания просто задержки которых явно в программе нету...
Поэтому вопрос неснимает так всетоки что такое в winavr pgm_read_byte?
...Поэтому вопрос неснимает так всетоки что такое в winavr pgm_read_byte?
pgm_read_byte() возвращает байт, прочитанный из программной памяти по указанному (аргумент ф-и) адресу, pgm_read_word() соответственно возвращает 2 байта.
вместо pgm_read.... не пишите ничего. При инициализации массива вместо PROGMEM не пишите ничего, перед именем типа модификатор доступа к памяти flash укажите.
С инициилизацией вчера еше разобрался вот шас ,осталась последняя функция :
Код:
void lcd_bmp(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, uint16_t *data) { uint16_t bmp_x = pgm_read_word(data++); //Размер по X uint16_t bmp_y = pgm_read_word(data++); //Размер по Y
PORTB &= ~_BV(LCD_CS); // select display
lcd_cmd(SD_CSET); lcd_dat0(0x08+x1); // start is 8, not 0 lcd_dat0(0x01+(x1 >> 8)); lcd_dat0(0x08+x2+x1); // is 00x8B = 0x83+8 lcd_dat0(0x01+(x2+x1 >> 8));
lcd_cmd(SD_PSET); lcd_dat0(y1); lcd_dat0(y2+y1);
lcd_cmd(RAMWR);
for(uint8_t y = 0; y < bmp_y; y++) for(uint8_t x = 0; x < bmp_x; x++) lcd_dat16(pgm_read_word(data++)); //Передача данных в LCD
PORTB |= _BV(LCD_CS); // deselect display }
вот непонятно:
uint16_t bmp_x = pgm_read_word(data++); //Размер по X uint16_t bmp_y = pgm_read_word(data++); //Размер по Y создаем переменную 16 битную uint16_t bmp_x,присваиваем ей значеине какое ? берем входяшие в функцию значение data и инкрементируем его чтоли?Входное значение для функции берется из масива в winavr это так :
lcd_bmp(24, 8, 83, 159, (uint16_t *) &title);
масив определяется так :
const uint16_t title[] PROGMEM = { 84, 160, 65535, 65535, 65535, 27876, 26081, 19649***(дальше пошло 13440 значений)
}
также lcd_dat16(pgm_read_word(data++)); вызваем функцию lcd_dat16 отправляем в нее значения data++ откуда она их берет какой элемент масива читает...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения