Rst7 5 8 апреля, 2009 Опубликовано 8 апреля, 2009 · Жалоба абстрактному среднему писателю GCC лишь-бы непрерывно монстреющий Linux собирался и более ничего особо не надо Плюс дофига. Меня тут уже тыкали носом в "жрите что дают" :( Желание пользовать гнуся от этого совсем не прибавилось. Разочарования - добавилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
manul78 4 8 апреля, 2009 Опубликовано 8 апреля, 2009 (изменено) · Жалоба Блин, у меня теперь еще интересней проблема ! На работе, где стоит старый 20070525 все работает как часы... А вот дома, притом и на "стационарном" компе и на "буке" 20090313... Решил новый "наганть" и поставить старый, дык он собака где-то прописался и старый (е) у меня их около 5 сортов разных лет - не хотят работать. Весь реестр вычистил, НУ ВСЕ высистил, что можно - балда ! Вещает : > "make.exe" all AllocationBase 0x0, BaseAddress 0x71590000, RegionSize 0x3C0000, State 0x10000 C:\WinAVR-20070525\utils\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 487 AllocationBase 0x0, BaseAddress 0x71590000, RegionSize 0x3C0000, State 0x10000 C:\WinAVR-20070525\utils\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 487 -------- begin -------- avr-gcc (GCC) 4.1.2 (WinAVR 20070525) Copyright © 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. AllocationBase 0x0, BaseAddress 0x71590000, RegionSize 0x3C0000, State 0x10000 C:\WinAVR-20070525\utils\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 487 make.exe: *** [sizebefore] Error 1 > Process Exit Code: 2 > Time Taken: 00:01 Блин ! Да что-же это такое !!! И на буке таже песня ! Новый ставишь - все работает. Любого из старичков - пишет (см. верх) . Раньше не было такого никогда. Может знает кто - где он помимо реестра следы остав- ляет ? Пытался искать в SYSTEM32 и прочих "отсеках" - куда там, у меня винда стоит 3-тий год, распухла до 12 гектар... сносить проблемматично. Че делать ? :smile3046: Изменено 8 апреля, 2009 пользователем manul78 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба по поводу увеличения размера кода "свежими" версиями - я тут создавал темку, где мне доступно объяснили, что есть масса ключей оптимизации, которые позволяют и свежей версией получить минимальный размер кода. в моем случае я довольно легко добился лучшего результата, чем при сборке старой версией. возможно, немножко обидно, что раньше маленький код получался сам, а теперь надо какие-то опции включать-выключать и т.п. - однако, никто не сравнивал "старый" и "новый" код по быстродействию, например? может, размер - не самое главное? тем более когда речь не о килобайтах, а о байтах разницы. раньше, например, когда писалось PORTB |= _BV(PB1); компилятор всегда генерировал код с обращением к ячейке памяти по соответствующему адресу, т.е. делал минимум 3 команды: LDS, ORI и STS. это было очень хорошо (с одной стороны), так как легко позволяло обращаться к порту по указателю, но по скорости SBI все-же гораздо лучше. и вот в последней версии заметил, что теперь генерируется именно SBI! причем при обращении через указатель получается "старый" вариант - ведь лучше же стало, а?! :) хотя странности присутствуют все равно в коде :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба и вот в последней версии заметил, что теперь генерируется именно SBI! Первый WinAVR, с которым я начал серьезно работать - 20071221 уже без проблем делал sbi/cbi/sbic Вы какой именно "старый" имеете ввиду - GCC 3 ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба раньше, например, когда писалось PORTB |= _BV(PB1); компилятор всегда генерировал код с обращением к ячейке памяти по соответствующему адресу, т.е. делал минимум 3 команды: LDS, ORI и STS. это было очень хорошо (с одной стороны), так как легко позволяло обращаться к порту по указателю, но по скорости SBI все-же гораздо лучше. и вот в последней версии заметил, что теперь генерируется именно SBI! #include <avr/io.h> void foo() { PORTB |= 0x01; } WinAVR-20060421 (gcc 3.4.6) -Os -S -mmcu=atmega8 foo: sbi 56-0x20,0 ret Более древних на работе нет, но что-от мне вспоминается, что это только с gcc 2.95 такое было, а с перехода на 3.х я уже вместо макросов inb, outb, sbi да cbi стал писать обычное =, |= да &=~ Точнее, с момента полного перехода, кода 2.95 уже был снесён на всех компах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба C:\WinAVR-20070525\utils\bin\sh.exe: *** Couldn't reserve space for cygwin's heap, Win32 error 487Поиск в гугле по сообщению об ошибке очень помогает в таких случаях. В комплекте WinAVR идет какая-то очень древняя версия утилит из msys, которую очень любит Eric Weddington. И вместе с этим набором из версии в версию WinAVR кочуют и все болячки той версии msys. На мои призывы к автору обновить эти утилиты был дан ответ - "у них нет нормального инсталятора, мне лень". Сходите на сайт mingw32/msys и скачайте там самые свежие версии всех этих утилит. После чего используйте их со всеми версиями WinAVR, а идущие в комплекте забудьте как страшный сон. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба "старый" - это какой-то старый :) я всегда инсталлирую новые версии в одну и ту же папку WinAVR - так что память о версии старых стерта вместе с версиями :) но ведь это и не принципиально. стало лучше - это главное. хотя финты с тасовкой регистров порой изумляют :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ARV 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба и все-таки, почему никто из гуру не ответит на вопрос: как заставить работать опцию -mno-wrap? она не опознается как "родная", если передавать ее просто в командной строке avr-gcc и не производит никакого эффекта, если передать ее ассемблеру! а очень нужно избавиться от rjmp в проекте на atmega32. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
manul78 4 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба Поиск в гугле по сообщению об ошибке очень помогает в таких случаях. В комплекте WinAVR идет какая-то очень древняя версия утилит из msys, которую очень любит Eric Weddington. И вместе с этим набором из версии в версию WinAVR кочуют и все болячки той версии msys. На мои призывы к автору обновить эти утилиты был дан ответ - "у них нет нормального инсталятора, мне лень". Сходите на сайт mingw32/msys и скачайте там самые свежие версии всех этих утилит. После чего используйте их со всеми версиями WinAVR, а идущие в комплекте забудьте как страшный сон. Уважаемый Сергей ! Я даже не знаю как Вас благодарить... :laughing: Самое интересное, что на "стационарном" компе и на "буке" были совершенно разные "занозы" !!! 1) Ноутбук я победил сам. Почти пол дня ковырялся ! Причиной "глюка" был Антивирус Касперского. почти всю ночь и пол дня я читал описание на WinAVR и понял суть проблемы, файл sh.exe из utils\bin работает с операционной системой, единственное, что могло этому обмену помешать, это "проактивн- ая защита Касперского". До его установки все было гуд. Я внес sh.exe в доверенную зону - и все за- работало !!! 2) С "стационарным" компом такие выкрутасы не прошли. Я затужил. Работа горит а главный мой комп что-то вроде "осьминога" напичкан всеми примочками для отладки "в железе". Он важнее чем "бук" Зашел по вашей ссылке, почитал и уже собирался вникать в Линукс и прочие дела, кстати про "палки в колеса со стороны антивирусов, там тоже есть". Хотел было уже качать 500 метровый GNU pack... Но заглянул на крошечную ссылку, http://www.madwizard.org/electronics/articles/winavrvista Я сначала пролетел, у меня то XP ! Там нашлось лекарство, и очень простое ! Качаем 300 сот килограммовый msys-rebased.zip и перезаписываем его в utils\bin , там это по мое- му единственная DLL-ка ms-1.0 dll И все ! Земля опять завертелась !!! Жму руку как ПРОФЕССИОНАЛУ, заходящему сюда не "флудить" а помогать словом и делом !!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_Shl 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба А я столкнулся с таким глюком: есть бутлоадер с эмуляцией STK500. Пишу через него - пишется нормально. Читаю - бывают ошибки, по адресу 0x4000 ошибок нет. Читаю ISP программатором - тех ошибок что показывал бутлоадер нет, по адресу 0x4000 лежит слово FFFF. Вроде помогла такая штука: Было: n_bytes = ((*(rx_pntr + 1) * 256) + *(rx_pntr + 2)); // number of databytes to read from flash Стало: *(((unsigned char *)&n_bytes) + 1) = *(rx_pntr + 1); *(((unsigned char *)&n_bytes) + 0) = *(rx_pntr + 2); Пробовал каждый раз на разных файлах, поэтому "вроде"... BootLoader.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aesok 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 (изменено) · Жалоба А я столкнулся с таким глюком: Вот ЭТО написано человеком который поленился прочитать документацию: unsigned char readBits(unsigned int address) { asm volatile( "mov r31,r25 \n\t" "mov r30,r24 \n\t" "lds r24,%0 \n\t" "ori r24,0x09 \n\t" "sts %0,r24 \n\t" "lpm \n\t" "mov r24,r0 \n\t" : "=m" (SPMCSR) ); return address&0xFF; } Это баг не в комптляторе, это баг в коде. Анатолий. Изменено 9 апреля, 2009 пользователем aesok Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_Shl 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба Вот ЭТО написано человеком который поленился прочитать документацию:Код не мой. Return взят из какого-то файла скачанного из ветки в этом форуме. Но этот код к вышеописанной проблеме отношения не имеет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aesok 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба Вот ЭТО написано человеком который поленился прочитать документацию: unsigned char readBits(unsigned int address) { asm volatile( "mov r31,r25 \n\t" "mov r30,r24 \n\t" "lds r24,%0 \n\t" "ori r24,0x09 \n\t" "sts %0,r24 \n\t" "lpm \n\t" "mov r24,r0 \n\t" : "=m" (SPMCSR) ); return address&0xFF; } Это баг не в комптляторе, это баг в коде. Если readBits вызывается как функция то проблем не возникнет, так как регистры r24, r25, r30 и r31 являются CALL_USED регистрами и в коде вызывающей функции предполагаться что они не содержат те значения, что были в них перед вызовом readBit. Когда же код этой функции инлайнится то могут возникнуть проблемы, так как регистры r24, r25, r30 и r31 искажаются в ассемблерной вставке, но компилятор об этом не предупрежден. Может генерироваться код записывающий информацию в эти регистры до ассемблерной вставки и использующий эту информацию после, не смотря на то что она искажена. Регистры r24, r25, r30 и r31 должны быть добавлены в clobber list. Анатолий. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_Shl 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба Если readBits вызывается как функцияОна вообще не вызывается если не давать команды CMD_READ_FUSE_ISP или CMD_READ_LOCK_ISP. Чтение локов и фузов действительно не работает, но оно меня толком и не интересует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 9 апреля, 2009 Опубликовано 9 апреля, 2009 · Жалоба О чем Вы поете? Оно ж пишет rjmp в байтах, а не в словах!Логично, логично. Лажа с моей стороны имеет место быть :( Proteus, кажется (может я не нашел?), и правда битность PC не учитывает: .text:1003E3F4 OPCODE_rcall_CALL proc near .text:1003E3F4 arg_0 = word ptr 4 .text:1003E3F4 .text:1003E3F4 push edi .text:1003E3F5 mov edi, ecx .text:1003E3F7 mov eax, [edi] .text:1003E3F9 mov ecx, edi .text:1003E3FB add dword ptr [edi+3080h], 1 .text:1003E402 call dword ptr [eax+34h] .text:1003E405 movzx eax, [esp+4+arg_0] .text:1003E40A mov edx, eax .text:1003E40C and edx, 0FFFh .text:1003E412 test eax, 800h .text:1003E417 jz short loc_1003E41F .text:1003E419 add edx, 0FFFFF000h .text:1003E41F .text:1003E41F loc_1003E41F: .text:1003E41F add [edi+3080h], edx .text:1003E425 pop edi .text:1003E426 retn 4 .text:1003E42A OPCODE_rjmp_CALL proc near .text:1003E42A arg_0 = word ptr 4 .text:1003E42A .text:1003E42A movzx edx, word ptr [esp+4] .text:1003E42F mov eax, edx .text:1003E431 and eax, 0FFFh .text:1003E436 test edx, 800h .text:1003E43C jz short loc_1003E443 .text:1003E43E add eax, 0FFFFF000h .text:1003E443 .text:1003E443 loc_1003E443: .text:1003E443 mov edx, [ecx+3080h] .text:1003E449 lea eax, [eax+edx+1] .text:1003E44D mov [ecx+3080h], eax .text:1003E453 retn 4 Как временное решение (ежели без Proteus'а вообще никак) - делать патч (маскировать лишние биты). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться