Перейти к содержанию

Avr Gcc Формирует Слишком Много Кода


rmatveev

Рекомендуемые сообщения

Друзья!

Я написал коротенькую программку (ее код ниже), но компилятор (avr gcc) налабал больше 2K кода (у меня процессор ATTiny26, соответственно, программа уже не влезает. И это при том, что я еще не дошел до вычислений, которые там будут, и возможно, с плавающей точкой...

Посмотрел дизассемблер - что-то там и правда много всего лишнего на мой взгляд. Мой код компилируется нормально, беда в том, что компилятор добавляет еще кучу каких-то кусков назначение которых мне вовсе не понятно. Вот названия непонятных кусков: __gtsf2, __ltsf2, __floatunsisf, __clzsi2, __pack_f, __unpack_f, __fpcmp_parts_f, __prologue_saves__, __epilogue_restores__

Компилятор в режиме Os (это вроде как скорость, но в этом режиме получается самый компактный код, в других режимах код еще больше).

Что можно сделать?

1) Сменить компилятор? Мне вообще-то avr gcc что-то не очень нравится и по другим причинам. Если IAR поможет решить эти проблемы, то наверно я пересяду.

2) Что-то выкинуть из программы? Может я что-то не заметил и какие-то действия вызывают сложные мат.функции?

3) Что-то подкрутить в настройках компилятора?

4) Моя ставка на младший контроллер изначально была не правильной?

5) Еще что-нибудь?

Спасибо!

Ну и код, собственно:

#include "avr/io.h"
#include "avr/interrupt.h"

#define fVCS(v) (255*v/5) // ïðåîáðàçîâàíèå VP (0...300Â) â äàííûå ÀÖÏ (0...255)
#define VCSMAX fVCS(0.55) // ìàêñèìàëüíîå çíà÷åíèå VCS
#define VCSNORM fVCS(0.48) // ðàáî÷åå çíà÷åíèå VCS
#define fVP(v) ((unsigned)255*v/200/2.56)
// ïðåîáðàçîâàíèå VCS (0...5Â) â äàííûå ÖÀÏ (0...255)
#define VPSTART fVP(175) // ïîðîã çàïóñêà ïðåîáðàçîâàòåëÿ (175Â)
#define VPSAVE fVP(170) // ïîðîã âûäà÷è ñèãíàëà SAVE (170Â)
#define VPSTOP fVP(60) // ïîðîã âûäà÷è ñèãíàëà STOP(60Â)
#define NS 8 // ÷èñëî èñïóëüîâ START ïðè âêëþ÷åíèè

volatile unsigned char ADC_data=0;// äàííûå ÀÖÏ (0...255)
volatile unsigned char DAC_data=0;// äàííûå, ïåðåäàâàåìûå â ÖÀÏ (0...255 = 0...5Â)
volatile unsigned int VP; // íàïðÿæåíèå ????? â âîëüòàõ
volatile unsigned int msec; // òàéìåð: óâåëè÷èâàåòñÿ íà 1 êàæäóþ ìèëëèñåêóíäó

typedef struct
{
unsigned bit0:1;
unsigned bit1:1;
unsigned bit2:1;
unsigned bit3:1;
unsigned bit4:1;
unsigned bit5:1;
unsigned bit6:1;
unsigned bit7:1;
} BYTE_BITFIELD;

#define ddra (*((volatile BYTE_BITFIELD*)(&DDRA )))
#define ddrb (*((volatile BYTE_BITFIELD*)(&DDRB )))
#define porta (*((volatile BYTE_BITFIELD*)(&PORTA)))
#define portb (*((volatile BYTE_BITFIELD*)(&PORTB)))
#define pina (*((volatile BYTE_BITFIELD*)(&PINA )))
#define pinb (*((volatile BYTE_BITFIELD*)(&PINB )))

#define SAVE porta.bit5 // îïòðîí çàïèñè ñîñòîÿíèÿ òåðìèíàëà
#define LED_VPN porta.bit4 // îòëàäî÷íûé
#define STOP porta.bit3 // ñèãíàë îñòàíîâà ïðåîáðàçîâàòåëÿ
#define START porta.bit2 // ñèãíàë çàïóñêà ïðåîáðàçîâàòåëÿ

#define DAC_SYNC portb.bit3 // óïðàâëåíèå ÖÀÏ (âûáîð)
#define DAC_SCLK portb.bit2 // óïðàâëåíèå ÖÀÏ (ñèíõðîíèçàöèÿ)
#define DAC_DIN portb.bit0 // óïðàâëåíèå ÖÀÏ (äàííûå)

#define clrb_STOP STOP = 0
#define setb_STOP STOP = 1
#define clrb_START START = 0
#define setb_START START = 1
#define clrb_SAVE SAVE = 1
#define setb_SAVE SAVE = 0
#define clrb_EORLOCK ddrb.bit6=0// ïåðåâîä ñèãíàëà EORLOCK â ïàññèâíîå ñîñòîÿíèå (ïåðåêëþ÷åíèå â ðåæèì âõîäà)
#define setb_EORLOCK portb.bit6=0; ddrb.bit6=0
// ïåðåâîä ñèãíàëà EORLOCK â àêòèâíîå ñîñòîÿíèå (ïåðåêëþ÷åíèå â ðåæèì âûõîäà ñ íóëåì)

#define setb_ADSC ADCSR |= ( 1<<6 )
#define setb_I SREG != ( 1<<7 )
#define clrb_I SREG &= ~( 1<<7 )

void delay_us( volatile signed int usec )
{
usec -= 5; // 38 "ëèøíèõ" òàêòîâ, @8ÌÃö ïðèìåðíî 5 ìêñ.
if( usec < 0 ) usec = 0;
usec = usec >> 1; // 1 öèêë = 16 òàêòîâ, @8ÌÃö = 2 ìêñ.
for( ; usec>0; usec-- )
{
asm( "nop" );
asm( "nop" );
asm( "nop" );
asm( "nop" );
asm( "nop" );
}
}

void WriteDAC( unsigned char data )
{
unsigned int data1 = data;
data1 = data1 << 4;

DAC_SYNC = 1;
DAC_SCLK = 1;
DAC_SYNC = 0;

for( int i=0; i<16; i++ )
{
(data1&0x8000) ? (DAC_DIN=1) : (DAC_DIN=0);
data1 = data1<<1;
DAC_SCLK = 0;
DAC_SCLK = 1;
}
}

int main( void )
{
unsigned int i;

DDRA = 0b01111100;
DDRB = 0b00111101;

WDTCR = 0b00001000; // 000=(reserved)
// 0=Watchdog change disabled
// 1=Watchdog enabled
// 000=prescaler 1/16384

TCCR1A = 0b00000000; // 00=Comparator A disconected,
// 00=Comparator B disconected,
// 0=No Force Output Compare Match 1A
// 0=No Force Output Compare Match 1B
// 0=No PWM A
// 0=No PWM B
TCCR1B = 0b00000110; // 0=No Timer/Counter clear
// 0=No prescaler reset
// 00=(reserved)
// 0110=PCS/32
TIMSK = 0b00000100; // 0=(reserved)
// 0=TC1 A output compare int. disabled
// 0=TC1 B output compare int. disabled
// 00=(reserved)
// 1=TC1 overflow interupt enabled
// 0=TC0 overflow interupt disabled
// 0=(reserved)
ADMUX = 0b10100110; // 10=Internal Voltage Reference (2.56 V), AREF pin (PA3) not connected
// 1=ADC Left Adjust Result
// 00110=Input: ADC6 single ended
ADCSR = 0b11000111; // 1=ADC Enabled
// 1=Start conversion
// 0=No free-running mode (single conversion)
// 00=Clear interrupt flag,ADC interrupt disabled
// 111=Confersion time CK/128

msec = 0;
DAC_data = VCSMAX;
setb_STOP;
while( VP < VPSTART ) {}
clrb_STOP;
setb_EORLOCK;
for( i=0; i<NS; i++ ) {
delay_us( 300 );
setb_START;
asm( "nop" );
asm( "nop" );
asm( "nop" );
asm( "nop" );
asm( "nop" );
asm( "nop" );
asm( "nop" );
clrb_START; }
clrb_EORLOCK;
while( msec < 300 ) {}
DAC_data = VCSNORM;

while(1)
{
VP = ADC_data;
if( VP < VPSAVE ) setb_SAVE; // åñëè VP ÷óòü ÷óòü ñíèçèëîñü - âûñòàâëÿåì SAVE
if( VP > VPSTART ) clrb_SAVE; // åñëè VP âåðíóëîñü â íîðìó - ñíèìàåì SAVE
if( VP < VPSTOP) // åñëè VP îïóñòèëîñü íèæå ìèíèìàëüíîãî, òî
{
clrb_I; // çàïðåùàåì âñå ïðåðûâàíèÿ
while(1) {} // çàâèñàåì (÷òî áû ñðàáîòàë WDT è îáðåñåòèë êîíòðîëëåð)
}
}

return 0;
}

ISR( TIMER1_OVF1_vect )
{
asm( "wdr" );
TCNT1 = 0xFF - 250;
msec++;

WriteDAC( DAC_data );
if( ( ADCSR&(1<<6) ) == 0 ) ADC_data = ADCH;
setb_ADSC;
}

Изменено пользователем rmatveev
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Операции с плавающей запятой сжирают (именно сжирают) память. Два варианта: либо избавляться от чисел такого формата, либо мк брать пожирнее. То же касается и математических функций, хотя и не в такой степени.

И это при том, что я еще не дошел до вычислений, которые там будут, и возможно, с плавающей точкой...

Как это не дошел? А это что:

#define fVCS(v) (255*v/5) // i?aia?aciaaiea VP (0...300A) a aaiiua AOI (0...255)
#define VCSMAX fVCS(0.55) // iaeneiaeuiia cia?aiea VCS
#define VCSNORM fVCS(0.48) // ?aai?aa cia?aiea VCS
#define fVP(v) ((unsigned)255*v/200/2.56)
// i?aia?aciaaiea VCS (0...5A) a aaiiua OAI (0...255)
#define VPSTART fVP(175) // ii?ia caionea i?aia?aciaaoaey (175A)
#define VPSAVE fVP(170) // ii?ia auaa?e neaiaea SAVE (170A)
#define VPSTOP fVP(60) // ii?ia auaa?e neaiaea STOP(60A)

(Уж не ворованный ли часом код батенька?)

Изменено пользователем солар

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

#define fVCS(v) (255*v/5) // ïðåîáðàçîâàíèå VP (0...300Â) â äàííûå ÀÖÏ (0...255)

#define VCSMAX fVCS(0.55) // ìàêñèìàëüíîå çíà÷åíèå VCS

#define VCSNORM fVCS(0.48) // ðàáî÷åå çíà÷åíèå VCS

#define fVP(v) ((unsigned)255*v/200/2.56)

Вот и плавающая точка :) . Дальше можно уже и не смотреть ....

Или убирайте её, или берите проц пожирнее - ATMega8/16 ...

Я вообще тиньки не люблю. Развернуться негде. ИМХО, годится только опрашивать 3 кнопки и мигать 2-мя лампочками. Может я и не прав, я не знаю.

Изменено пользователем hd44780
Ссылка на комментарий
Поделиться на другие сайты

Проверьте уровень оптимизации и приведите логи компилирования

Что за уровень оптимизации? У меня стоит Os - это оно?

И логи компилирования - это что? Какой-то файл?

Операции с плавающей запятой сжирают (именно сжирают) память. Два варианта: либо избавляться от чисел такого формата, либо мк брать пожирнее. То же касается и математических функций, хотя и не в такой степени.

И это при том, что я еще не дошел до вычислений, которые там будут, и возможно, с плавающей точкой...

Как это не дошел? А это что:

#define fVCS(v) (255*v/5) // i?aia?aciaaiea VP (0...300A) a aaiiua AOI (0...255)
#define VCSMAX fVCS(0.55) // iaeneiaeuiia cia?aiea VCS
#define VCSNORM fVCS(0.48) // ?aai?aa cia?aiea VCS
#define fVP(v) ((unsigned)255*v/200/2.56)
// i?aia?aciaaiea VCS (0...5A) a aaiiua OAI (0...255)
#define VPSTART fVP(175) // ii?ia caionea i?aia?aciaaoaey (175A)
#define VPSAVE fVP(170) // ii?ia auaa?e neaiaea SAVE (170A)
#define VPSTOP fVP(60) // ii?ia auaa?e neaiaea STOP(60A)

(Уж не ворованный ли часом код батенька?)

Блин, действительно он литерал вычисляет в коде, а не в ходе компиляции (почему, кстати?).

Код не ворованный, с чего вы взяли?

#include "avr/io.h"

#include "avr/interrupt.h"

#define fVCS(v) (255*v/5) // ïðåîáðàçîâàíèå VP (0...300Â) â äàííûå ÀÖÏ (0...255)

#define VCSMAX fVCS(0.55) // ìàêñèìàëüíîå çíà÷åíèå VCS

#define VCSNORM fVCS(0.48) // ðàáî÷åå çíà÷åíèå VCS

#define fVP(v) ((unsigned)255*v/200/2.56)

Вот и плавающая точка :) . Дальше можно и не смотреть ....

Или убирайте её, или берите проц пожирнее - ATMega8/16 ...

Так это ж литерал!!! Я был уверен, что он его при компиляции посчитает :(((
Ссылка на комментарий
Поделиться на другие сайты

Вот это

#define fVP(v) ((unsigned)255*v/200/2.56)

компилятор посчитает. Но будет работать с ним да и со всем остальным согласно заявленному определению, т.е. как с вещественными числами.

(Подозрения о воровстве возникли исходя из того, что текст программы содержит объявления вещественных чисел, а вы удивляетесь тому, что, применяя эти числа, в теле обнаруживаете ссылки на работу с этими числами.

Изменено пользователем солар

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

Я был уверен, что он его при компиляции посчитает :(((

Значит, он не такой умный, как Вы думали. Либо его что-то смутило и он испугался сам это считать :) /

Ссылка на комментарий
Поделиться на другие сайты

Я вообще тиньки не люблю. Развернуться негде. ИМХО, годится только опрашивать 3 кнопки и мигать 2-мя лампочками. Может я и не прав, я не знаю.

Их маленьких не бывает. Я нашел 32 ноги минимум :(

Я был уверен, что он его при компиляции посчитает :(((

Значит, он не такой умный, как Вы думали. Либо его что-то смутило и он испугался сам это считать :) /

Выходит, что так... Может, IAR будет поумнее?

Ссылка на комментарий
Поделиться на другие сайты

Их маленьких не бывает. Я нашел 32 ноги минимум :(

Плохо искали. У меня лежит ATTiny2313 - DIP-20 (20 ног).

ATTiny10 - вообще 6 ног. Но это уже не контроллер, а гнум какой-то :crazy: ....

Вот вам ссылка http://www.atmel.com...ew:table),sc:1) посмотрите сами ...

Изменено пользователем hd44780
Ссылка на комментарий
Поделиться на другие сайты

Их маленьких не бывает. Я нашел 32 ноги минимум :(

Плохо искали. У меня лежит ATTiny2313 - DIP-20 (20 ног).

ATTiny10 - вообще 6 ног. Но это уже не контроллер, а гнум какой-то :crazy: ....

Вот вам ссылка http://www.atmel.com...ew:table),sc:1) посмотрите сами ...

Вы же говорили про Меги, вот я и говорю, что их (=мега) не бывает маленьких (минимум 32 ноги). А тиньки - да, есть и по 8 и даже 6 ног...

(Подозрения о воровстве возникли исходя из того, что текст программы содержит объявления вещественных чисел, а вы удивляетесь тому, что, применяя эти числа, в теле обнаруживаете ссылки на работу с этими числами.

Ну я вроде объяснил, что не ожидал от компилятора такой подставы. И вообще, я не думал, что существует практика тырить код: во-первых с ним потом фигдва что сделаешь а во-вторых - где его взять?! Каждый пишет себе и никуда не выкладывает, это же не кино :)

Ссылка на комментарий
Поделиться на другие сайты

Что за уровень оптимизации? У меня стоит Os - это оно?

И логи компилирования - это что? Какой-то файл?

Оно. А логи пишутся, например в Build Log вашей среды разработки, примерно в таком виде:

-------------- Build: Release in joy ---------------
[ 50.0%] avr-gcc.exe -Wall -mmcu=atmega8 -DF_CPU=12000000UL  -Os -g  -mmcu=atmega8 -Wall -Wa,-ahl=listing.lst    -c main.c -o obj\Release\main.o
[100.0%] avr-g++.exe  -o bin\Release\joy.elf obj\Release\main.o   -mmcu=atmega8 -Wl,-Map=bin\Release\joy.elf.map,--cref -s 
Output size is 636.00 bytes
[ 33.3%] Running project post-build steps
[ 66.7%] avr-size --mcu=atmega8 --format=avr bin\Release\joy.elf
AVR Memory Usage
----------------
Device: atmega8
Program:	 338 bytes (4.1% Full)
(.text + .data + .bootloader)
Data:		  9 bytes (0.9% Full)
(.data + .bss + .noinit)
[100.0%] avr-objcopy -O ihex -R .eeprom -R .eesafe bin\Release\joy.elf bin\Release\joy.elf.hex
avr-objcopy --no-change-warnings -j .eeprom --change-section-lma .eeprom=0 -O ihex bin\Release\joy.elf bin\Release\joy.elf.eep.hex
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 0 warnings

Ну а в чем дело уже написали...

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Да, насчёт мег Вы правы. Самая маленькая - Mega8. 28 ног в DIP либо 32 ноги в TQFP.

IAR лучше сами проверьте. Накрученные, многоуровневые макросы компилятор может и не понять.

У Вас - 2 уровня: VCSMAX вызывает fVCS.

Изменено пользователем hd44780
Ссылка на комментарий
Поделиться на другие сайты

Что за уровень оптимизации? У меня стоит Os - это оно?

И логи компилирования - это что? Какой-то файл?

Оно. А логи пишутся, например в Build Log вашей среды разработки, примерно в таком виде:


rm -rf mpt2.o  mpt2.elf dep/* mpt2.hex mpt2.eep mpt2.lss mpt2.map
Build succeeded with 0 Warnings...
avr-gcc  -mmcu=attiny26 -Wall -gdwarf-2 -std=gnu99 -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -MD -MP -MT mpt2.o -MF dep/mpt2.o.d  -c  ../mpt2.c
avr-gcc -mmcu=attiny26 -Wl,-Map=mpt2.map mpt2.o     -o mpt2.elf
avr-objcopy -O ihex -R .eeprom -R .fuse -R .lock -R .signature  mpt2.elf mpt2.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex mpt2.elf mpt2.eep || exit 0
avr-objdump -h -S mpt2.elf > mpt2.lss

AVR Memory Usage
----------------
Device: attiny26

Program:    2448 bytes (119.5% Full)
(.text + .data + .bootloader)

Data:        262 bytes (204.7% Full)
(.data + .bss + .noinit)


Build succeeded with 0 Warnings...

Так что делать-то? Как компилятор форсить вычислять литералы в ходе компиляции а не в коде?

Ссылка на комментарий
Поделиться на другие сайты

Для начала уберите макрос, подставьте туды константу, посчитанную руками, на кулькуляторе.

Если поможет, тогда будем про макросы думать. Может там ещё какое-то западло сидит, которого мы все тут не заметили ...

Изменено пользователем hd44780
Ссылка на комментарий
Поделиться на другие сайты

Компилятор сделал ровно то, о чем его просили. Вы применяете параметризованные макросы с плавающей точкой, а в коде пишете, например:

DAC_data = VCSNORM;

где переменная приводится к плавающему типу, к тому же объявлена с квалификатором volatile. Так что литералами тут и не пахнет.

Любой, заслуживающий внимания, опыт приобретается себе в убыток...

Ссылка на комментарий
Поделиться на другие сайты

Да все он уже просчитал!!!:

while( VP < VPSTART ) {}
10e: 60 91 64 01 lds r22, 0x0164
112: 70 91 65 01 lds r23, 0x0165
116: 80 e0 ldi r24, 0x00 ; 0
118: 90 e0 ldi r25, 0x00 ; 0
11a: f9 d0 rcall .+498 ; 0x30e <__floatunsisf>
11c: 20 e0 ldi r18, 0x00 ; 0
11e: 38 e3 ldi r19, 0x38 ; 56
120: 4e ea ldi r20, 0xAE ; 174
122: 52 e4 ldi r21, 0x42 ; 66
124: c2 d0 rcall .+388 ; 0x2aa <__ltsf2>
126: 87 fd sbrc r24, 7
128: f2 cf rjmp .-28 ; 0x10e <__stack+0x2f>

Уважаемый hd44780 ! Вы тешите у ТС несбыточные надежды. Сказано уже: либо уходим от плавающей запятой, либо меняем мк.

Изменено пользователем солар

Я не раздаю удочки. Я продаю рыбу.

Ссылка на комментарий
Поделиться на другие сайты

У Вас - 2 уровня: VCSMAX вызывает fVCS.

Попробовал 1 уровень. Не помогло. Пока не убрал вообще 2.56 из формулы он все равно пытался ее вычислять в коде :((((

В общем я сильно огорчен. Какой тогда вообще смысл применять язык высокого уровня?

Только сплошные мучения что бы он не дай бог не понял меня не так :((((((((

Компилятор сделал ровно то, о чем его просили. Вы применяете параметризованные макросы с плавающей точкой, а в коде пишете, например:

DAC_data = VCSNORM;

где переменная приводится к плавающему типу, к тому же объявлена с квалификатором volatile. Так что литералами тут и не пахнет.

А можно как-то форсить преобразование к нужному мне типу?

Ссылка на комментарий
Поделиться на другие сайты

Кста. Может дело и правда в компияторе.

Не знаю, кто там как форсит, но я сейчас тупо закинул код автора в свой старый добрый CvAVR (c небольшими правками, конечно). Он нагенерил 608 байт кода - ~30% флэша.

Я, правда, сильно сомневаюсь, правильно ли он переварил эти жуткие (на моё ИМХО) конструкции типа #define ddra (*((volatile BYTE_BITFIELD*)(&DDRA )))

По крайней мере, не выматюкался.

PS.

Если хочется писать #define STOP porta.bit3 // ñèãíàë îñòàíîâà ïðåîáðàçîâàòåëÿ

то проще взять CvAVR, который вещи типа PORTA.3=0; понимает от рождения. Зачем делать слона из носорога? Или наоборот ...

А потом гадать, из-за чего у нас элементарный код вымахивает до фантастических размеров ....

Изменено пользователем hd44780
Ссылка на комментарий
Поделиться на другие сайты

проще взять CvAVR, который вещи типа PORTA.3=0; понимает от рождения. Зачем делать слона из носорога? Или наоборот ...

А потом гадать, из-за чего у нас элементарный код вымахивает до фантастических размеров ....

CvAVR - это что, CodeVision?

Ссылка на комментарий
Поделиться на другие сайты

CvAVR - это что, CodeVision?

Да, он самый :) .

К слову. Например.

#define nop #asm("nop")
#define CS_L PORTB.4=0
#define CS_H PORTB.4=1
............
void LCD_WR_REG(byte index,word val)
{
CS_L;
RS_L;

DATA_L=index;
DATA_H=0;

WR_L;
nop;
nop;
WR_H;
RS_H;
DATA_L=(byte)val;
DATA_H=(byte)(val>>8);

WR_L;
nop;
nop;
WR_H;
CS_H;
} // LCD_WR_REG			

RS_L, WR_H и прочие определены также.

Это кусок из абсолютно рабочего кода.

Изменено пользователем hd44780
Ссылка на комментарий
Поделиться на другие сайты

CvAVR - это что, CodeVision?

Да, он самый :) .

Уже посмотрел на рутрекере - что-то там ругаются на несовместимость, глюки и прочие гадости... Не знаете откуда можно взять?

Я вот про эти раздачи: http://rutracker.org/forum/viewtopic.php?t=3836761 и http://rutracker.org/forum/viewtopic.php?t=2703149

Ссылка на комментарий
Поделиться на другие сайты

Я не оттуда качал, не знаю. x64 винды я вообще не люблю, а на моём 4-ядерном Core2quad оно работает прекрасно.

И в 2003 сервере, и в семёрке.

Могу версию 2.05 на файлообменник закинуть - 27 метров. Ссылку дам в личку, чтоб меня кое в чём не обвиняли :)

То место, где я качал, уже прикрыли :(

Изменено пользователем hd44780
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...