Skip to main content

c++

2015

C++ na AVR (Arduino), makro ISR i błąd multiple definition of `__vector_XYZ’
·134 words·1 min
blog.dsinf.net arduino avr c++ hardware
| Przy przeorganizowywaniu kodu na Arduino z procesorem AVR w którym wykorzystuję makro ISR (do obsługi przerwań systemowych) umieściłem je w pliku nagłówkowym (.h) co wyrzuciło mi malowniczy i (jak zwykle) nic nie mówiący błąd kompilatora “multiple definition of `__vector_11’”.
Mbed.org helper
·219 words·2 mins
blog.dsinf.net c++ embedded mbed.org nucleo
Mbed.org to webowe (a nawte cloudowe) IDE do tworzenia oprogramowania na sporą gamę mikrokontrolerów takich jak STM32 Nucleo F401RE. Na Linux.com jest ciekawy artykuł o tym środowisku. Proces wgrywania oprogramowania jest prosty lecz można go zautomatyzować - i to robi mbed-helper.

2013

syntax error : missing ’;’ before 'type’ //C w MSVC
·112 words·1 min
blog.dsinf.net c++ msvc visual studio
MS Visual C obecny w Visual Studio (nawet w 2013!) jako kompilator czystego C z bliżej nieznanych powodów używa wersji języka z 1990, w której niedozwolone było definiowanie z deklaracją w jednej linii, czyli int zmienna = 0; zwróci błąd w czasie kompilacji syntax error : missing ';' before 'type' To, co wydaje się normalne zostało wciągnięte w wersję C z 1999. Zatem trzeba po prostu wpisać dziwnie wyglądające dla programisty C++
C++: Konwersja systemów liczenia
·293 words·2 mins
blog.dsinf.net c++ matematyka systemy liczenia
Jak nauczył mnie tegoroczny konkurs o dziką kartę NMC trzeba zawsze mieć konwerter wszystkich możliwych systemów liczenia, bowiem liczenie zadania na 5 konwersji kilkucyfrowych liczb i jednego XORa to wystarczający powód by się lekko zdenerowować 😉 Zadanie brzmiało: 7. Wybierz poprawny wynik operacji 3A995(11) XOR 153262(7) a. 799A(17) b. 13BB3(13) c. B024(15) Cóż, nie ma co się załamywać, tylko trzeba pisać program i mieć go potem cały czas przy sobie. Kod, który jakiś czas temu powstał
C++ – dwa słowa o przesunięciu bitowym (<<=, >>=)
·98 words·1 min
blog.dsinf.net c++
Ten artykuł w ogóle nie zasługuje na miano artykułu. Powiedzmy o nim bardzo krótki wpis. A rzecz jest o niby oczywistej, a jednak bez przykładu nie - stosowaniu przesunięcia bitowego. Przesunięcie bitowe jak wiadomo przesuwa bity: 00001011«2 = 00101100, 11110100 »3 00011110 itd. Problem polega na tym, że to niby operator jednoargumentowy, ale nie działa jak inkrementacja/dekrementacja - sama na samą siebie, zatem int a=123; c<<4; nie zrobi nic (tak jak a+2;).
C# – cross thread operation invalid. Rozwiązanie proste.
·110 words·1 min
blog.dsinf.net c# unsafe c++
Microsoft idąc w “bezpieczeństwo” w C# .NET zabronił wątkom dostawać się do obiektów z innych wątków - głównie sprowadza się to do nieudanej próby zaktualizowania textBoxa, czy label’ki w wielowątkowej aplikacji (wątek pracujący mógłby zgłosić stan pracy do użytkownika). Rozwiązać problem można na dwa sposoby. Pierwszy z nich jest dość brutalny i “niebezpieczny”, ale za to skuteczny i szybki. Wystarczy przestawić jedno pole: Control.CheckForIllegalCrossThreadCalls = false; Jeśli jesteśmy paranoikami bezpieczeństwa można zezwolić na wywołania międzywątkowe tylko na czas naszych operacji - żeby zły człowiek nie zepsuł interfejsu, albo w przypadku bardziej złożonych aplikacji - czegoś więcej.
Okienko zawsze na wierzchu w C#
·193 words·1 min
blog.dsinf.net c++ win c#
Microsoft zawsze raczył nas dziwnymi rozwiązaniami prostych spraw. Problem częsty przy małych aplikacjach w C#, które mają być zawsze na wierzchu - stoperach, minutnikach, czy monitorach wydajności - jak uczynić okno pozostającym zawsze na wierzchu. Na MSDNie zaproponowano rozwiązanie, które znaleźć możemy jako Property kontrolki WindowsForm: this.TopForm = true; Jednak jak można doczytać od Windowsa 2000 ta zmiana dotyczy zakresu danej aplikacji - znaczy to, że jeśli pracujemy z wielookienkowym narzędziem to możemy podpiąć jakiś toolbar, żeby nie zniknął.
Liczby, które w zapisie ósemkowym mają jakąś cyfrę, która występuje dwa razy – zadanie sprawdzianowe
·313 words·2 mins
blog.dsinf.net algorytmika c++
Ciekawe zadanie programistyczne, które umożliwia stworzenie gotowych funkcji do naszego zbioru. Treść brzmi dziwnie: wypisać liczby, które w zapisie ósemkowym mają cyfrę występującą dokładnie dwa razy. Po pierwsze musimy zkonwertować na inny zapis. string dec2other(int x, int base){ int l=x,t; string napis=""; while (l){ t=l%base; if (t<10) napis=char(t+48)+napis; else napis=char(t+55)+napis; l/=base; } return napis; } Kod opiera się na dzieleniu modulo i rzutowaniu na znak - dla cyfr większych od 9 potrzeba nam cyfry z hex’a: A,B,C… Warto zauważyć, że należałoby dołożyć jeszcze założenia podobne do tych:

2012

Operacje bitowe w prostych funckjach
·445 words·3 mins
blog.dsinf.net algorytmika c++
Operacje bitowe - dla początkujących to brzmi strasznie. Możemy sumować (OR), mnożyć (AND), odejmować (popularniej ksorować - XOR), negować (NOT), lub przesuwać bity. Ale dziś dwa zastosowania: podzielność przez 2 bez dzielenia modulo i sprawdzenie, czy liczba jest potęgą dwójki. Ale na początek trochę podstaw. Operujemy na dwójkowym zapisie liczb, każdy bit, czyli krótko mówiąc jej cyfra. 0 to fałsz, 1 to prawda, często rozpatrywane w kategoriach bitu ustawionego i nie.
Szybka optymalizacja C++ przy wczytywaniu zmiennych
·341 words·2 mins
blog.dsinf.net c++ optymalizacja
Wiele optymalizacji kodu C++ jest łudzących, ale zmiana formatu wczytywania dużej ilości danych nie jest jedną z nich. W końcu to konsola i ekran są najwolniejsze.