реклама на сайте
подробности

 
 
> WinAVR или ..., стоит ли?
ra9ftm2
сообщение May 6 2006, 13:34
Сообщение #1





Группа: Участник
Сообщений: 11
Регистрация: 5-03-06
Пользователь №: 14 965



Вот все пытаюсь какой-нить пример запустить на WinAVR, никак не могу ничего найти подходящего.
Простые штучки получается откомпилить и они прослеживаются в aStudio. Типа этого:
#include <avr/io.h>
#include <avr/delay.h>
void ioinit (void)
{DDRD=0xFF;DDRC=0xFF;}

int main(void)
{ ioinit();
while(1)
{ PORTD= 0xff; _delay_ms(10);PORTD=0;}
return (0);}

Но хочется чего-то более сложного.
В примерах, которые мне попадаются, используются левые типы типа BYTE, BIT и т.п.
Левые функции, которые я не могу найти в папках winavr\avr\include\... Например outp(0xff,DDRB);

Вот только что нашел очень хороший исходник-библиотеку от Alechin здесь http://electronix.ru/forum/index.php?showtopic=10934&st=0 - "Драйвер граф. дисплея МТ12864" - мне как раз его и нужно оживить. Засунул все в aStudio проект. И результат - куча ошибок.

МК atmega8, просты программки работают, все прошивается и т.д.
Раньше имел дело только с асемблером. В Си несколько сложнее sad.gif
Ни один пример, который встречал, пока не удалось откомпилить...

Может стОит IAR искать, скачивать, крякать, запускать... ?
Просто такое ощущение, что стандартных библиотек в WinAVR вообще по минимуму.

Пожалуйста, подскажите как быть...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
733259
сообщение May 14 2006, 04:56
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 205
Регистрация: 8-03-05
Пользователь №: 3 146



.data - инициализированные переменные в RAM, шрифты лучше поместить в флэшку (.text) вот так:
BYTE __attribute__((progmem)) zero[] = {
или
#include <avr/pgmspace.h>
BYTE PROGMEM zero[] = {

читаем так
byte = pgm_read_byte(zero + n);

на скорость функция особо не влияет - pgm_read_byte транслируется в одну команду (lpm)

Цитата
Ах да, все это работает когда я банально заменил файлик avr-gcc.exe на avr-c++.exe у WinAVR...

ИМХО лучше в makefile написать CC = avr-c++
Go to the top of the page
 
+Quote Post
ra9ftm2
сообщение May 15 2006, 15:24
Сообщение #3





Группа: Участник
Сообщений: 11
Регистрация: 5-03-06
Пользователь №: 14 965



Цитата(733259 @ May 14 2006, 07:56) *
...
читаем так
byte = pgm_read_byte(zero + n);
...


Да, но не перекраивать же теперь всю программу? Может быть можно как-то адрес получить?

Пробовал пока вот так:

struct FONT Font_6x8 =
{ 8, 6, 255,
&Font_6x8_Data[0] // вот здесь адрес получаю, эта структура без изменений
};


BYTE Font_6x8_Data[] PROGMEM
=
{0x01,0x02,..., };

считывал как обычно по адресу - работает только почему-то буквы не те печатает.
Т.е. идет смещение. Или это вообще непонятно что получается...?

Я так понял в IAR это обозначает __flash вот так:
__flash BYTE Font_6x8_Data[] =
{...};

Но там никаких левых функций не используется для чтения.

Цитата
попробуйте компилятор CodeVisionAVR - наверняка вам понравится.

Да, возможно потом посмотрю, но пока начал здесь.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 06:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01397 секунд с 7
ELECTRONIX ©2004-2016