Wpis z mikrobloga

Mirki potrzebuję małej porady. Próbuję zrobić real time delay na esp8266, żeby sobie obsłużyć ds18b20 po magistrali onewire.
Potrzebuję weryfikacji czy dobrze myślę.

Kod macie tutaj:
https://pastebin.com/34QJ0GQS

A więc tak, defaultowo CPU esp8266 jest takowane zegarem 80MHz
A więc
1s -> 80 000 000 cykli CPU
1ms -> 80 000 cykli CPU
1us -> 80 cykli CPU

Do precyzyjnego odmierzania czasu wykorzystuję rejestr ccount, zawierający liczbę cykli procesora.

Załóżmy, że na magistrali muszę zrobić delay 10us, a więc 800 cykli procesora
Po uruchomieniu mojego kodu printowana jest informacja:

"Cycles diff: 815"
Tutaj macie disassembly funkcji: customdelayus https://pastebin.com/GRU8BbpG
Między linijką 24 a 34 widać instrukcje funkcji 'wait', jak widać są to 4 instrukcje.

Teraz moje pytanie - czy mogę założyć, że koszt funkcji 'wait' to 4 instrukcje -> ~15 cykli procesora?
Czy w takim razie przekazując parametr do funckji 'wait' powinienem odjąc te 15 cykli procsora aby mieć precyzyjny delay?

Czy robiąc READCCOUNT(cyclesend); nie powinienem od cycles_end odjąć jakiejś wartości? Mimo wszystko interesuje mnie koszt samego delaya, a samo pobranie wartości z tego rejestru również kosztuje jakieś cykle procesora.

Moje rozumowanie bazuje trochę na informacjach znalezionych w necie, ale linki, które tam znalazłem są albo niedostępne, albo brak precyzyjnego wytłumaczenia.

#embedded
  • 5