Nie używaj makr parametryzowanych (makrodefinicji) jeśli można napisać funkcję inline, która wykona to samo zadanie.
//Nie rób tak:
#define MAX(A,B) ((A) > (B) ? (A) : (B))
// jeśli możesz zrobić tak:
inline int max(int a, int b)
Powód: Przy używaniu dyrektywy preprocesora #define jest dużo związanych z nią zagrożeń a w szczególności gdy są to makra parametryzowalne. Ważne jest odpowiednie (najczęściej w dużej ilości) użycie nawiasów (tak jak w przykładzie powyżej), ale nie wyeliminuje przypadkowego użycia inkrementacji jak np. MAX(i++,j++), która zwiększy zmienne o 2 zamiast o 1 jak to na pierwszy rzut oka wygląda.
Inne ryzyko nadużycia makr to porównanie liczb ze znakiem i bez (wspominałem o tym w poprzednim odcinku) lub jakiekolwiek porównania z liczbami zmiennoprzecinkowymi.
niedziela, 15 września 2013
środa, 11 września 2013
Unikanie błędów programując w C - #1 liczby całkowite ze znakiem i bez
Postanowiłem napisać cykl krótkich artykułów (a właściwie porad) dla osób, które zaczynają programować systemy wbudowane w języku C. Skłonił mnie do tego sposób w jaki piszą studenci, którzy odbywają praktyki (lub dorabiają sobie) u nas w firmie. Ich kod jest mało czytelny, zajmuje dużo miejsca po skompilowaniu i zawiera dużo błędów, które nie ujawniają się od razu ale dopiero np. po włączeniu optymalizacji, dopisaniu kolejnego fragmentu kodu lub w losowych momentach.
Na pierwszy ogień idą liczby całkowite ze znakiem i bez.
Liczby całkowite ze znakiem nie powinny być używane z liczbami całkowitymi bez znaku w porównaniach lub innych wyrażeniach.
//Nie rób tego...
uint8_t a = 6u;
int8_t b = -9;
if (a + b < 4) {
//program powinien iść tą prawidłową ścieżką
//bo -9 + 6 = -3 < 4
} else {
//ale wykona się ten fragment ponieważ
// -9 + 6 stanie się dla kompilatora
// (256 - 9) + 6 = 253.
// 247 (bez znaku) == -9 ze znakiem
}
Powyższy program skompilowany i uruchomiony na 8-bitowym AVR wykona się tak jak opisałem w komentarzach. Co ciekawe jeśli skompilujesz ten kod u siebie na komputerze to wykona się poprawnie (zgodnie z przewidywaniami). Dzieje się to dlatego, że pracujesz na 32 lub 64 bitowym procesorze i rejestry mają taką długość. Zmień jednak typ zmiennych na np. uint32_t i int32_t a zadziała jak na AVR :)
niedziela, 24 lutego 2013
Projekty anten na PCB
Zestaw anten na różne częstotliwości (2.4GHz, 868 / 915 / 920 MHz, 433 MHz, 315 MHz, 136 - 240 MHz), o różnych rozmiarach i pasmach do wykonania na PCB od Texas Instruments http://www.ti.com/lit/an/swra351a/swra351a.pdf
wtorek, 4 września 2012
poniedziałek, 3 września 2012
Kolejny Eval Board za grosze
TI rozpoczął przedsprzedaż eval boarda za symboliczne $5 (z przesyłką, także do Polski):
https://estore.ti.com/Stellaris-LaunchPad.aspx
Płytka ta jest kompletnym systemem uruchomieniowym zawierającym mikrokontroler oraz zintegrowany interfejs sprzętowy (programator/debuger).
https://estore.ti.com/Stellaris-LaunchPad.aspx
Płytka ta jest kompletnym systemem uruchomieniowym zawierającym mikrokontroler oraz zintegrowany interfejs sprzętowy (programator/debuger).
Na pokładzie znajduje się mikrokontroler LM4F120H5QR z rdzeniem Cortex M4F w obudowie LQFP64. Jest on całkiem nieźle wyposażony:
- 256 kB Flash
- 32 kB SRAM
- zegar do 80MHz
- 4 x I2C
- 4 x SPI
- 8 x UART
- 12 bitowe ADC (próbkowanie do 1000kSPS)
- 2 Analogowe komparatory
- 16 Cyfrowych komparatorów
- wewnętrzny czujnik temperatury
- CAN
- RTC
- USB Device
poniedziałek, 13 sierpnia 2012
Kilka słów o imporcie z Chin
Nie jestem ekspertem w dziedzinie importu spoza Unii Europejskiej ale postaram się przedstawić moje pierwsze doświadczenia w tej materii. Od jakiegoś czasu robiłem mniejsze zakupy, ale niedawno postanowiliśmy z moim wspólnikiem sprowadzić trochę części elektronicznych z Dalekiego Wschodu, jako, że ceny oferowane przez lokalnych dystrybutorów nawet przy kilku tysiącach były kilkukrotnie wyższe niż te oferowane przez Chińczyków. Opiszę więc w krokach co i jak.
1. Szukanie producenta / sprzedawcy w Chinach
Ja zwykle szukam ofert firm w popularnych serwisach typu Alibaba, Made in China, DHgate, Dealextreme.
Dealextreme to w zasadzie sklep z podanymi cenami. W zasadzie nie pasuje tu do całej reszty ale korzystałem z niego już niejednokrotnie i postanowiłem wspomnieć o nim w kilku słowach. Cenami może nie powala (zdarza się, że na allegro jest taniej) ale czasami można znaleźć coś przydatnego w okazyjnej cenie.
Paczka wysyłana jest zwykłą pocztą (przesyłka nierejestrowana) i jest to opcja bezpłatna. Przy bardziej kosztownych zakupach można wybrać przesyłkę rejestrowaną (niewielka dopłata) lub nawet kuriera ale to już trochę kosztuje (jeszcze nie sprawdzałem tej opcji). Paczka do Polski idzie od 3 do 5 tygodni.
Płatności dokonuje się za pomocą PayPala lub kartą kredytową. Chińczyk zazwyczaj zaniża wartość przesyłki i oznacza ją jako próbka. Jeszcze nie zdarzyło mi się płacić cła za zakupy z DX. Cała procedura zakupów jest prosta i nie jest wymagany bezpośredni kontakt z Chińczykiem.
Trochę trudniejsza sprawa jest z pozostałymi serwisami. Są to w zasadzie katalogi producentów / sprzedawców reklamujących się i swoje produkty. Przy wyborze trzeba kierować się ocenami kupujących, długością stażu jak również ilością transakcji zakończonych sukcesem (w zasadzie jak na allegro). Po znalezieniu interesującego nas towaru wysyłamy zapytanie ofertowe do kilku czy kilkunastu firm. O zasadach jak takie zapytanie skonstruować w internecie znajdziecie dużo informacji. Następnie przychodzi czas na negocjacje. Zazwyczaj udaje się jeszcze zejść z ceny podawanej przez sprzedawcę. Przydają się argumenty w stylu, że jest to zamówienie próbne, następne będą większe i regularne, widzicie duże zapotrzebowanie w Polsce na te towary itp. Oczywiście zawsze należy kierować się zdrowym rozsądkiem. Przy zbyt dobrej ofercie lub znacznie różniącej się od tej zaoferowanej przez pozostałych sprzedawców powinno się Wam zapalić czerwone światełko :). Niestety oszuści również używają tych serwisów.
Przydatne w rozmowach z Chińczykami są różnego rodzaju czaty czy też Skype - podobno oni to lubią :). Niestety ze względu na różnicę czasu (ok 6-7 godzin) rozmowy te muszą odbywać się w nocy lub wcześnie rano (chociaż zdarza się, że niektórzy pracują do 20 ichniego czasu - 12-13 u nas)
2. Płatność za towary
Testowałem dwie metody płatności: przelew bankowy oraz płatność kartą.
Przelew bankowy niestety nie jest najtańszą i najszybszą opcją, ale czasami jesteśmy na niego skazani (szczególnie przy dużych kwotach). Sam przelew idzie do odbiorcy kilka dni i kosztuje nawet kilkadziesiąt złotych (lub więcej w zależności od kwoty przelewu) - trzeba zajrzeć w cennik swojego banku.
Płatności kartą kredytową są wygodne jeżeli korzystamy np. z
Escrow . Sam osobiście bałbym się podać numer karty Chińczykowi.
3. Transport
Dotychczas przy większych zakupach korzystałem z usług firm kurierskich. Nie jestem jeszcze na tyle dużym importerem żeby sprowadzać całe kontenery statkiem. Sprzedawcy najczęściej mają podpisane umowy z DHLem czy UPSem i mają całkiem niezłe ceny (nawet $20 przy mniejszych paczkach). Paczka do Polski leci w zasadzie 2-3 dni robocze. Zaletą firm przewozowych jest to, że działają przy nich agencje celne ale o tym w kolejnym punkcie.
Przy większych zakupach bardziej opłacalne jest zapakowanie towaru na statek. Niestety nie mam doświadczenie w tym temacie więc nie będę się rozpisywał.
4. Cło i podatek
Przy większych zakupach trzeba się liczyć niestety z zapłatą cła i podatku. Cło w zależności od tego co sprowadzamy może się różnić. Kupując części elektroniczne i wszystko co z tym związanie płaciłem 0 lub 3.7% cła i oczywiście 23% VATu jako, że jestem vatowcem. I tu drobna uwaga. W cenę towaru wlicza się również koszt transportu.
Przy wszystkich formalnościach z cłem warto skorzystać z agencji celnej. Wystarczy podpisać stosowną umowę/upoważnienie do reprezentacji w naszym imieniu przed urzędem celnym. Do podpisania takiej umowy potrzebne są dokumenty firmy (NIP, REGON) oraz numer EORI (więcej o tym w następnym punkcie)
Nie wiem z czego to wynika ale Chińczycy zazwyczaj zaniżają koszty produktu (z jednej strony dobrze bo płacimy mniejsze cło :) ), nie podają kosztów transportu, załączają do przesyłki błędne faktury (brak numeru faktury, nieprawidłowy adres nadawcy i odbiorcy, błędnie opisana zawartość itp.). Niestety z taką przesyłką najczęściej są problemy przy odprawie celnej. Paczka taka może nie wyjść z Agent celny może np. wziąć standardową cenę za przesyłkę z Chin (a ta jest horrendalnie wysoka) a my będziemy musieli zapłacić za to cło i podatek. Dlatego zawczasu warto poprosić Chińczyka o to by wystawił prawidłową fakturę, bo później będziemy musieli się o nią postarać gdy paczka będzie już w Polsce w urzędzie celnym. A to wydłuża czas transportu a nawet może zwiększyć koszty (np. w DHL'u jeżeli paczka leży powyżej 3 dni to naliczana jest kwota 100zł i 25zł za każdy następny dzień)
5. EORI
EORI to Wspólnotowy System Rejestracji i Identyfikacji Podmiotów Gospodarczych (ang. Economic Operators’ Registration and Identification - EORI). Każdy importer (eksporter chyba też) musi posiadać numer EORI. Aby go uzyskać należy wypełnić odpowiedni formularz (do pobrania ze strony Ministerstwa Finansów) i złożyć go w odpowiednim dla swojego miejsca Urzędzie Celnym. Cała procedura jest bezpłatna a numer uzyskuje się na miejscu lub w ciągu paru godzin zostaje przesłany na podany adres e-mail.
Jeśli ktoś chce uzyskać numer w Gdyni to może mieć pewien problem ze znalezieniem właściwego urzędu (przynajmniej ja miałem). Nie znajduje się on wbrew temu co można znaleźć w internecie na ulicy Północnej. Poniżej poglądowa mapka gdzie dokładnie należy złożyć formularz (punkt oznaczony Urząd Celny). (Tak wiem, na mapie nawet nie ma tam zaznaczonej drogi, a zaznaczone miejsce na większości map to jakaś firma)
piątek, 10 sierpnia 2012
Szkolenie ST z STM32 F0
Jakby ktoś chciał się doszkolić z STM32 F0:
http://www.st.com/internet/com/Learning/stm32f0_europe_seminar_regform.jsp#
szkolenia są w Sopocie, Toruniu i Krakowie na początku października
Subskrybuj:
Posty (Atom)
