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

Vova75

Участник
  • Постов

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

  • Посещение

Репутация

0 Обычный

Информация о Vova75

  • День рождения 26.11.1975

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array
  1. Разобрался, этот акселерометр не торопится(видимо сказывается природа малого потребления) изменять выход, в результате на 5,5МГц с мегой168 связь не получилась. А то что получилось с другой полярностю SPC, то это багофича, к тому же нестабильная.
  2. В режиме SPI указано, что SPC должен по умолчанию находиться в 1, стробировать по подъёму, изменять выход по падению. Подключил к меги168, работает с другой полярностю SPC чем в PDFе. Это только у меня так, или у кого нибудь есть опыт работы с этим акселерометром ?
  3. Ошибку в прологе/эпилоге при использовании ISR(xxx_vect, ISR_NOBLOCK) так и не исправили :( Проект для меги1280 на С++ в 14КБ собрался на 150 байт меньше, это хорошо.
  4. Если подходить к делу с фанатизмом то это поможет: --param max-unrolled-insns=5000 --param max-average-unrolled-insns=5000 --param max-unroll-times=500 Но результат будет более чем экстремальный.
  5. Нет, это не дефолтный конструктор. Обе экземпляра абсолютно идентичны, кроме названия. Оптимизация на это не влияет. Вот простейший тест: В h-файле: class T_PID { int _p, _i, _d; public: T_PID (int p, int i, int d); }; В cpp-файле: #include "pid.h" T_PID::T_PID (int p, int i, int d) : _p(p), _i(i), _d(d) {} на выходе: 1 .file "pid.cpp" 2 __SREG__ = 0x3f 3 __SP_H__ = 0x3e 4 __SP_L__ = 0x3d 5 __CCP__ = 0x34 6 __tmp_reg__ = 0 7 __zero_reg__ = 1 8 .section .text._ZN5T_PIDC2Eiii,"ax",@progbits 9 .global _ZN5T_PIDC2Eiii 11 _ZN5T_PIDC2Eiii: 12 /* prologue: function */ 13 /* frame size = 0 */ 14 0000 FC01 movw r30,r24 15 0002 7183 std Z+1,r23 16 0004 6083 st Z,r22 17 0006 5383 std Z+3,r21 18 0008 4283 std Z+2,r20 19 000a 3583 std Z+5,r19 20 000c 2483 std Z+4,r18 21 /* epilogue start */ 22 000e 0895 ret 24 .section .text._ZN5T_PIDC1Eiii,"ax",@progbits 25 .global _ZN5T_PIDC1Eiii 27 _ZN5T_PIDC1Eiii: 28 /* prologue: function */ 29 /* frame size = 0 */ 30 0000 FC01 movw r30,r24 31 0002 7183 std Z+1,r23 32 0004 6083 st Z,r22 33 0006 5383 std Z+3,r21 34 0008 4283 std Z+2,r20 35 000a 3583 std Z+5,r19 36 000c 2483 std Z+4,r18 37 /* epilogue start */ 38 000e 0895 ret DEFINED SYMBOLS *ABS*:00000000 pid.cpp C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:2 *ABS*:0000003f __SREG__ C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:3 *ABS*:0000003e __SP_H__ C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:4 *ABS*:0000003d __SP_L__ C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:5 *ABS*:00000034 __CCP__ C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:6 *ABS*:00000000 __tmp_reg__ C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:7 *ABS*:00000001 __zero_reg__ C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:11 .text._ZN5T_PIDC2Eiii:00000000 _ZN5T_PIDC2Eiii C:\DOCUME~1\user\LOCALS~1\Temp/ccuP49Fw.s:27 .text._ZN5T_PIDC1Eiii:00000000 _ZN5T_PIDC1Eiii NO UNDEFINED SYMBOLS Присутствуют две идентичные функции: _ZN5T_PIDC1Eiii _ZN5T_PIDC2Eiii
  6. Спасибо помогло. Я сам пытался сделать тоже самое, но забыл что опции для линкера передются через "-Wl".
  7. Не инлайн . Два экземпляра в листинге cpp-файла где он (конструктор) описан.
  8. Всем привет ! Случайно заметил в листинге два экземпляра конструктора. Для конструктора класса "T_PID" в листинге сpp-файла обнаружилось две функции: _ZN5T_PIDC2Effff _ZN5T_PIDC1Effff Причём по содержанию они идентичны. В дизасемблере (.lss) присутствуют обе функции, а используется "_ZN5T_PIDC1Effff". Зачем нужен второй экземпляр ?
  9. При компиляции этого обработчика прерывания обнаружил глюк: #include "string.h" u08 tt[44]; ISR(INT0_vect,ISR_NOBLOCK) //INTERRUPT(INT0_vect) { u08 ss[44]; memcpy(tt, ss, 44); } на выходе: 511 .global __vector_1 513 __vector_1: 514 .LFB3: 515 .LM43: 516 02e8 7894 sei 517 02ea 1F92 push __zero_reg__ 518 02ec 0F92 push r0 519 02ee 0FB6 in r0,__SREG__ 520 02f0 0F92 push r0 521 02f2 0BB6 in r0,91-32 522 02f4 0F92 push r0 523 02f6 1124 clr __zero_reg__ 524 02f8 8F93 push r24 525 02fa AF93 push r26 526 02fc BF93 push r27 527 02fe EF93 push r30 GAS LISTING C:\DOCUME~1\user\LOCALS~1\Temp/ccUV7KxR.s page 10 528 0300 FF93 push r31 529 0302 DF93 push r29 530 0304 CF93 push r28 531 0306 CDB7 in r28,__SP_L__ 532 0308 DEB7 in r29,__SP_H__ 533 030a AC97 sbiw r28,44 534 030c DEBF out __SP_H__,r29 535 030e CDBF out __SP_L__,r28 536 /* prologue: Interrupt */ 537 /* frame size = 44 */ 538 .LM44: 539 0310 A0E0 ldi r26,lo8(tt) 540 0312 B0E0 ldi r27,hi8(tt) 541 0314 FE01 movw r30,r28 542 0316 3196 adiw r30,1 543 0318 8CE2 ldi r24,lo8(44) 544 .L30: 545 031a 0190 ld r0,Z+ 546 031c 0D92 st X+,r0 547 031e 8150 subi r24,lo8(-(-1)) 548 0320 01F4 brne .L30 549 /* epilogue start */ 550 .LM45: 551 0322 AC96 adiw r28,44 552 0324 DEBF out __SP_H__,r29 553 0326 CDBF out __SP_L__,r28 554 0328 CF91 pop r28 555 032a DF91 pop r29 556 032c FF91 pop r31 557 032e EF91 pop r30 558 0330 BF91 pop r27 559 0332 AF91 pop r26 560 0334 8F91 pop r24 561 0336 0F90 pop r0 562 0338 0BBE out 91-32,r0 563 033a 0F90 pop r0 564 033c 0FBE out __SREG__,r0 565 033e 0F90 pop r0 566 0340 1F90 pop __zero_reg__ 567 0342 1895 reti При модификации __SP_H__ / __SP_L__ прерывение не запрещается. Если применить устаревшый метод декларации "INTERRUPT" то код получается нормальный.
×
×
  • Создать...