-
Data: 2016-04-07 17:37:01
Temat: Re: zamulający program na AVR
Od: badworm <n...@p...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Dnia Thu, 7 Apr 2016 17:04:31 +0200, szod napisał(a):
> To sprawdź ustawienia bitów konfiguracyjnych uC - na jakim oscylatorze
> pracuje.
Kompilator do fusebitów raczej dostępu nie ma. Przed chwilą porównałem
prędkość zegara I2C dla wsadów z obu kompilatorów. Różnica jest
kolosalna - dla nowego GCC to zaledwie 5kHz, dla starego ponad 80kHz.
Kod generujący opóźnienia dla tej magistrali wygląda tak:
#include <avr\io.h>
#include <inttypes.h>
#include "harddef.h"
#include "makra.h"
#include "i2c.h"
// Wyliczenie czasu opóźnienia połówkowego i ćwiartkowego (cykle)
#define I2C_nhalf (F_CPU/I2C_SPEED/2)
// Funkcja dłuższych opóźnień
#if I2C_nhalf < 3
// Nic
#elif I2C_nhalf < 8
static void i2c_xdelay(void)
{
NOP();
}
#else
#define I2C_delayloops (1+(I2C_nhalf-8)/3)
#if I2C_delayloops > 255
#error Przyspiesz - bo sie nie wyrabiam ;)
#endif
static void i2c_xdelay(void)
{
asm volatile( \
"delayus8_loop%=: \n\t"\
"dec %[ticks] \n\t"\
"brne delayus8_loop%= \n\t"\
: :[ticks]"r"(I2C_delayloops) );
}
#endif //I2C_nhalf >= 3
// Opóźnienia dla I2C
static inline void i2c_hdelay(void)
{
#if I2C_nhalf < 1
return; // To jest funkcja inline, jeśli składa się tylko z "return"
jest usuwana podczas optymalizacji
#elif I2C_nhalf < 2
NOP();
#elif I2C_nhalf < 3
asm volatile(
"rjmp exit%=\n\t"
"exit%=:\n\t"::);
#else
i2c_xdelay();
#endif
}
--
Pozdrawiam Bad Worm badworm[maupa]post{kropek}pl
GG#2400455 ICQ#320399066
Następne wpisy z tego wątku
- 07.04.16 18:12 Grzegorz Kurczyk
- 07.04.16 19:01 badworm
- 07.04.16 20:02 AlexY
- 08.04.16 08:58 wchpikus
- 08.04.16 12:51 AlexY
- 08.04.16 15:51 Grzegorz Niemirowski
- 08.04.16 16:53 Marek
- 08.04.16 18:07 platformowe głupki
- 08.04.16 18:12 Grzegorz Niemirowski
- 08.04.16 18:19 platformowe głupki
- 08.04.16 18:31 Grzegorz Niemirowski
- 08.04.16 18:35 platformowe głupki
- 08.04.16 18:37 platformowe głupki
- 08.04.16 21:28 badworm
- 09.04.16 00:26 Grzegorz Niemirowski
Najnowsze wątki z tej grupy
- Rejestrator temperatur - termopara, siec
- Router LTE z możliwością zmian MTU
- Fajny film widziałem...
- Jaka ładowarka sieciowa do Iphona?
- Taśma izolacyjna do prac elektrycznych
- Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Re: Recenzja 3.1A ;) w 6 gniazdach...
- Wkrętarki, wiertarki...
- Zasilacz impulsowy 12V 10A, coś godnego uwagi jako zamiennik akumulatora wkrętarki
- Mouser - koszt wysyłki
- [OT] Jak wycinac ksztalt w piance lub styropianie?
- FV--> ciepła woda w kranie
- Szok
Najnowsze wątki
- 2025-07-14 Awaria VM?
- 2025-07-14 Gdańsk => Programista Kotlin <=
- 2025-07-14 Warszawa => Junior Rekruter <=
- 2025-07-14 Warszawa => Specjalista rekrutacji IT <=
- 2025-07-14 Wkłady do zniczy...
- 2025-07-14 Warszawa => Specjalista ds. Sprzętu Komputerowego <=
- 2025-07-14 Re: PO chroniło i chroni policyjnych bandziorów [zawiasy za katowanie obywatela (Poznań czerwiec 2012)]
- 2025-07-14 Warszawa => International Freight Forwarder <=
- 2025-07-14 Warszawa => Recruiter 360 <=
- 2025-07-14 Re: Rz?Âd ZAKAZUJE magazyn?Â?w energii ?!! Nowe prawo od 14 lipca to SZOK! ??Â
- 2025-07-14 Warszawa => Sales Assistant <=
- 2025-07-13 Fałszywe alerty
- 2025-07-12 dlaczego gadacie z tym debilem
- 2025-07-13 Unia Europejska przygotowuje nowy podatek
- 2025-07-13 Unia Europejska przygotowuje nowy podatek