Змінюй хід війни! Допомагай ЗСУ!

Электрофлуд :)

🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1424
Славик, ты даже не догадываешся о разнице в цене аренды на радио ранке и где-то в тихом цнтре на пересечении всех веток метро.

В тихом центре - не, не догадываюсь. Думаю, что тоже не дёшево.
 
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1425
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1426
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1427
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1428
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1429
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1430
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1431
Подыму тему, пожалуй. отголосками вечного холивара.

Делаю я тут один проектец на 2313, содержащий простейший цифровой вильтр, нужный исключительно изза плохого качества сигнала.

Решил я, значит, а чё я, хуже других? И упиздячил на С.

Когда программа заняла 300+ байт памяти (что от 2048 составляет около 15% и там были только сетапы периферии и обработчики прерываний с парой комманд в каждом), понял - не могу заставить С не заниматься ерундой и при входе в прерывание компаратора не занимать времени столько, что таймер до выхода успевает переполниться и ни какого фильтра не получается, так как он успевает сработать до того, как я не то что посчитаю - отреагирую.
Да, есть asm("code"); конечно, но пуши и попы не делать я его заставить всё равно не могу и в прерывание эта падла всё равно входит нужным только ей способом.

Проект был быстро переписан под асм, результат 5,4% памяти занято, я всё успеваю...

Вывод: писать на С под ATTiny - идиотизм.

(Говномётыыыыы... ПЛИ!!!)
 
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1432
А при чем тут Тини? Да хоть Мега 128, все равно бы не успел :) Никто и не говорил что на Си решается любая задача.
*говномет продолжает пылиться в углу* :D
 
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1433
асмовкие вставки в си, не?
 
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1434
асмовкие вставки в си, не?

Каг бэ да, но:

Да, есть asm("code"); конечно, но пуши и попы не делать я его заставить всё равно не могу и в прерывание эта падла всё равно входит нужным только ей способом.
 
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1435
асмовкие вставки в си, не?

Он ж универсальный, как валенок, лом или штыковая лопата :) То есть - с помощью С можно делать или всё, ну или почти всё, как думали его разработчики.

Проблема в том, что универсальность заставляет его, падлу, прятать в стек регистры и прочую херню при входе в подпрограмму, так как компилятор не знает что взбредёт программе в голову когда ей понадобится улететь в прерывание. А гибко работать с регистрами он не умеет.

Получается, что быстро войти в прерывание программа, написанная на С, - не могет - занимается какими-то служебными действиями, рассчитанными на универсальность.
Для таких дел в асме обычно оставляют нетронутый регистр, спецом для того, чтобы не думать что прятать, а что нет. А лучше - 2-3 регистра, что почти всегда возможно. В результате - влетев в прерывание я не занимаюсь PUSH, потом POP и другой хернёй - я сразу снимаю нужные данные в пустые регистры, делаю чего с ними надо и улепётываю.

А при чем тут Тини? Да хоть Мега 128, все равно бы не успел :) Никто и не говорил что на Си решается любая задача.
*говномет продолжает пылиться в углу* :D

Не, на ARMе с тактовой хоть 72МГц - уже те 12 тактов, которые тратятся на вскок - фигня и можно работать и из под С. А на CortexM3 - и ещё более продвинутый аппарат прерываний.
 
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1436
Да при чем тут АРМ, мы ж про АВР ядро говорим. Что мега, что тини одни и те же инструкции и одно время обработки прерывания при равной тактовой.

С Днем Рождения! :пиво:
 
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1437
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1438
Подыму тему, пожалуй. отголосками вечного холивара.

Делаю я тут один проектец на 2313, содержащий простейший цифровой вильтр, нужный исключительно изза плохого качества сигнала.

Решил я, значит, а чё я, хуже других? И упиздячил на С.

Когда программа заняла 300+ байт памяти (что от 2048 составляет около 15% и там были только сетапы периферии и обработчики прерываний с парой комманд в каждом), понял - не могу заставить С не заниматься ерундой и при входе в прерывание компаратора не занимать времени столько, что таймер до выхода успевает переполниться и ни какого фильтра не получается, так как он успевает сработать до того, как я не то что посчитаю - отреагирую.
Да, есть asm("code"); конечно, но пуши и попы не делать я его заставить всё равно не могу и в прерывание эта падла всё равно входит нужным только ей способом.

Проект был быстро переписан под асм, результат 5,4% памяти занято, я всё успеваю...

Вывод: писать на С под ATTiny - идиотизм.

(Говномётыыыыы... ПЛИ!!!)

А можно глянуть на код, который не успевал ( а лучше после компиляции вместе с промежуточным асм кодом ) показать? И какой компилятор использовался?
 
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1439
А можно глянуть на код, который не успевал ( а лучше после компиляции вместе с промежуточным асм кодом ) показать? И какой компилятор использовался?

AVR-GCC.
Код не покажу - я стёр нахер это УГ, перекопировав предварительно каменты, шоб 2 раза не набирать, и переписал на ассемблере.
 
  • 🟠 00:09 Загроза ударних БпЛАЗагроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1440
AVR-GCC.
Код не покажу - я стёр нахер это УГ, перекопировав предварительно каменты, шоб 2 раза не набирать, и переписал на ассемблере.

Вот сделал мелкую прогу и скомпилил в ГЦЦ. Что здесь не так?

Исходник:

#include<avr/io.h>
#include<avr/interrupt.h>

char a;

ISR(INT2_vect , ISR_NAKED)
{
a++;
reti();
}

int main()
{
a= 0;
while(1)
{
PORTB = a;
//do something
}
return 0;
}


Результат:

Disassembly of section .text:

00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 ; 0x54 <__ctors_end>
4: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
8: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
c: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
10: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
14: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
18: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
1c: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
20: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
24: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
28: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
2c: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
30: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
34: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
38: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
3c: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
40: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
44: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
48: 0c 94 3e 00 jmp 0x7c ; 0x7c <__vector_18>
4c: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>
50: 0c 94 3c 00 jmp 0x78 ; 0x78 <__bad_interrupt>

00000054 <__ctors_end>:
54: 11 24 eor r1, r1
56: 1f be out 0x3f, r1 ; 63
58: cf e5 ldi r28, 0x5F ; 95
5a: d4 e0 ldi r29, 0x04 ; 4
5c: de bf out 0x3e, r29 ; 62
5e: cd bf out 0x3d, r28 ; 61

00000060 <__do_clear_bss>:
60: 10 e0 ldi r17, 0x00 ; 0
62: a0 e6 ldi r26, 0x60 ; 96
64: b0 e0 ldi r27, 0x00 ; 0
66: 01 c0 rjmp .+2 ; 0x6a <.do_clear_bss_start>

00000068 <.do_clear_bss_loop>:
68: 1d 92 st X+, r1

0000006a <.do_clear_bss_start>:
6a: a1 36 cpi r26, 0x61 ; 97
6c: b1 07 cpc r27, r17
6e: e1 f7 brne .-8 ; 0x68 <.do_clear_bss_loop>
70: 0e 94 44 00 call 0x88 ; 0x88 <main>
74: 0c 94 48 00 jmp 0x90 ; 0x90 <_exit>

00000078 <__bad_interrupt>:
78: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>

0000007c <__vector_18>:
7c: 80 91 60 00 lds r24, 0x0060
80: 8f 5f subi r24, 0xFF ; 255
82: 80 93 60 00 sts 0x0060, r24
86: 18 95 reti

00000088 <main>:
88: 10 92 60 00 sts 0x0060, r1
8c: 18 ba out 0x18, r1 ; 24
8e: fe cf rjmp .-4 ; 0x8c <main+0x4>

00000090 <_exit>:
90: f8 94 cli

00000092 <__stop_program>:
92: ff cf rjmp .-2 ; 0x92 <__stop_program>



......... ерунда ...... ерунда..... ерунда....

...для таких дел в асме обычно оставляют нетронутый регистр, спецом для того, чтобы не думать что прятать, а что нет. А лучше - 2-3 регистра, что почти всегда возможно.

Да уж. В ГЦЦ для этого потребуется неимоверно сложная конструкция:

register unsigned char counter asm("r3");

И после этого (о боже!) компилятор гарантированно нигде не тронет этот регистр. То ли дело асм - как же забавно в середине проекта лопатить всю прогу и искать незадействованные регистры.



(Говномётыыыыы... ПЛИ!!!)

Ну где же вы, сеятели разумного доброго вечного? :rolleyes:
 
Останнє редагування:
Назад
Зверху Знизу