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

Petka

Свой
  • Постов

    1 438
  • Зарегистрирован

  • Посещение

Весь контент Petka


  1. Субботний оффтоп: Разделяю. Жаль, в некоторые микроконтроллеры недокладывают бит разрядности. Хорошо что появились микроконтроллеры, в которых разрядность адресов из коробки 32 бита и практически все виды памяти находятся в одном адресном пространстве - вот это для людей =)
  2. Извиняюсь за задержку с ответом. В качестве Хака попробуйте в файл "uart.c" после всех include добавить строчку: #define VAR_88CHIP Официально 10 kHz Если надо меньше - сделаем меньше. Не предусмотрен. Если очень надо, сделайте батник (три строчки всего), который в цикле будет считывать флэшку или сигнатуру чипа и смотрите спокойно сигналы. Вопрос не до конца понятен. Если всё дело в том что вы привыкли к зависающим программаторам - этот не из таких. Если вопрос в том можно ли заресетить микроконтроллер в программаторе? На плате выведен ресет контроллера на точку для пайки - припаяйте туда кнопку и перезагружайте контроллер когда понадобится. Схема и печатные платы не менялись всё что я выкладывал - актуально. (только надо выбрать какая разпиновка вам больше подойдёт) На здоровье. Фузы вроде правильно. отлично. Какие программы? С какими параметрами? Пробовали avrdude? Программой программатором или осциллографом.
  3. static int foo; int main (void){ return 0; } На любом ненулевом уровне оптимизации gcc выкидывает foo
  4. добавьте ключик "-ffunction-sections -fdata-sections -Wl,--gc-sections" и от вашей статической переменной абсолютно ничего не останется.
  5. Нет. нужно править main.c // 1Mhz out #define OUT_1MHZ_PORT C #define OUT_1MHZ_PIN 0 #define OUT_1MHZ_ALEV H
  6. int может быть 8ми битным, для этого надо указать gcc правильный ключик. Это ещё одна причина использовать архитектуры где флэш и оперативная память адресуются одинаково без ущерба для производительности (ARM, например).
  7. Не бывает тупого следования стандарту. Бывает либо соответствие стандарту, либо несоответствие стандарту. Если компилятор не соответствует стандарту, то одинаковый код на разных платформах будет давать разный результат.
  8. Это заблуждение. Если статическая переменная не используется в коде, то она выкидывается оптимизатором при уровне оптимизации большем чем -00. пример: // test.c static int something; // проверим, попадёт ли эта переменная в запускаемый файл #include <stdio.h> int main(void){ printf("test\n"); return 0; } gcc -o test.out test.c смотрим что попало в бинарь: > nm test.out 08049f20 d _DYNAMIC 08049ff4 d _GLOBAL_OFFSET_TABLE_ 080484bc R _IO_stdin_used w _Jv_RegisterClasses 08049f10 d __CTOR_END__ 08049f0c d __CTOR_LIST__ 08049f18 D __DTOR_END__ 08049f14 d __DTOR_LIST__ 080484c4 r __FRAME_END__ 08049f1c d __JCR_END__ 08049f1c d __JCR_LIST__ 0804a014 A __bss_start 0804a00c D __data_start 08048470 t __do_global_ctors_aux 08048360 t __do_global_dtors_aux 0804a010 D __dso_handle w __gmon_start__ 0804846a T __i686.get_pc_thunk.bx 08049f0c d __init_array_end 08049f0c d __init_array_start 08048400 T __libc_csu_fini 08048410 T __libc_csu_init U __libc_start_main@@GLIBC_2.0 0804a014 A _edata 0804a020 A _end 0804849c T _fini 080484b8 R _fp_hw 080482b8 T _init 08048330 T _start 0804a014 b completed.7021 0804a00c W data_start 0804a018 b dtor_idx.7023 080483c0 t frame_dummy 080483e4 T main U puts@@GLIBC_2.0 0804a01c b something теперь включаем минимальную оптимизацию: gcc -o test.out -O1 test.c смотрим что попало в бинарь: > nm test.out 08049f20 d _DYNAMIC 08049ff4 d _GLOBAL_OFFSET_TABLE_ 080484ec R _IO_stdin_used w _Jv_RegisterClasses 08049f10 d __CTOR_END__ 08049f0c d __CTOR_LIST__ 08049f18 D __DTOR_END__ 08049f14 d __DTOR_LIST__ 080484f4 r __FRAME_END__ 08049f1c d __JCR_END__ 08049f1c d __JCR_LIST__ 0804a014 A __bss_start 0804a00c D __data_start 080484a0 t __do_global_ctors_aux 08048380 t __do_global_dtors_aux 0804a010 D __dso_handle w __gmon_start__ 0804849a T __i686.get_pc_thunk.bx 08049f0c d __init_array_end 08049f0c d __init_array_start 08048430 T __libc_csu_fini 08048440 T __libc_csu_init U __libc_start_main@@GLIBC_2.0 U __printf_chk@@GLIBC_2.3.4 0804a014 A _edata 0804a01c A _end 080484cc T _fini 080484e8 R _fp_hw 080482dc T _init 08048350 T _start 0804a014 b completed.7021 0804a00c W data_start 0804a018 b dtor_idx.7023 080483e0 t frame_dummy 08048404 T main как видим статическая переменная не попала бинарь так как не используется!
  9. gcc когда встречает использование функции, которая не была объявлена расценивает это как объявление функции (о чём и говорит варнинг "implicit declaration of function 'memset'") когда на стадии линковки выясняется, что фактическое определение функции не совпадает с "implicit declaration", но количество параметров и их размер (но не тип) совпадают, то компилятор ТАКИ линкует код (и снова делает варнинг). Это оказывается работоспособным. Такое поведение НИКАК не связано со способностью компилятора делать оптимизации. невключение заголовочников не уменьшит код ни на грамм.
  10. могу только дополнить кусочком из книги K&R: "...Сдвиг вправо числа со знаком в некоторых системах приводит к заполнению этих битов (прим: освободившихся) значением знакового бита ("арифметический сдвиг") , а в других - нулями ("логический сдвиг")..." P.S. Однако, в случае топикстартера всё равно логический или арифметический сдвиг был применён. результат будет одинаковым.
  11. Если совсем правильно, то (*(volatile uint8_t *)(mem_addr)) где mem_addr это адрес порта D таким образом PIND это uint8_t т.е. ровно 8 битное беззнаковое число.
  12. Разбираем по шагам: PIND = 0b1110**** (PIND это 8 битное число) результат инвертирования (почему смотри ниже) будет иметь тип int (в avr-gcc тип int это знаковое 16 битное число). поэтому 8 битное беззнаковое число будет расширено до знакового 16 битного ~PIND == ~(0b00000000 1110****) == 0b11111111 0001*** (~PIND) >> 4 с правой стороны этого выражения числовая константа (без явного указания типа), а по стандарту си она должна интерпретироваться как тип int. При операции сдвига меньший операнд по стандарту си должен быть расширен до бОльшего (именно по этой причине компилятор делал инвертирование в 16 битах). т.е. имеем: (~PIND) >> 4 == 0b11111111 0001**** >> 4 == 0b11111111 11110001 итого, если результат приводится к 8ми битному типу то должно получиться 0b11110001. Если это не так, то надо более точно разбираться.
  13. $ CFLAGS='-EL' ./configure --prefix=/home/akhromov/CodeSourcery/staging_dir --host=mipsel-linux-gnu попробуйте сначала так сконфигурировать и собрать zlib а только потом так же сконфигурировать и собрать libpng
  14. Определите какой именно из 3х ключей нужен для запуска? 1) -EL 2) -march=74kc 3) -fPIC P.S. -EL это "Endian Little" Вероятно это единственный ключ, который надо добавить в CFLAGS при конфигурации библиотек. Попробуйте. "CFLAGS = -EL ./configure --prefix=.... --host=...."
  15. libpng уже обновился до версии 1.4.4 вряд ли в этом дело, но опробуйте обновиться. 1) Вы пробел сами оставили перед L (см выше) 2) Строчки начинающиеся с EXPORT можете не выполнять. Попробуйте и сообщите результат.
  16. В ближайшем времени постараюсь ещё раз обобщить результаты топика. БОльшая часть вопросов возникает из-за моей невозможности поправить первый пост в топике (и обновить там ссылки). Как раз Ваша помощь и понадобится.
  17. Эта строчка по идее никак не должна сказывться на возможность программирования. Т.к. процедура входа в режим программирования начинается с подачи ресета на контроллер. При ресете все пины контроллер переводит в высокоимпедансное состояние. Причина может быть косвенной, например при включении цепи "DRIVER" запускается нагрузка, которая просаживает питание или создаёт помехи, которые сбивают процесс программирования. Попробуйте в схеме убрать конденсатор с цепи ресета или добавьте параллельно резистору R7 диод (катодом к VCC). Попробуйте ещё для программирования программу avrdude. Если программатор программирует с другой управляющей программой, значит дело не в программаторе. Попробуйте в студии в настройках программирования понизить частоту ISP.
  18. Ethernet на ARM

    Физика использовалась 100 мегабитная (не стоит задачи использовать гигабитку)
×
×
  • Создать...