Projekt badawczy Polska-Namibia 2010

@T_O_J_A: Pan utak3r dobrze prawi. Z C# 3x razy szybciej osiągniesz pożądane efekty.
A co do zdań na temat od jakiej technologii powinno się zaczynać, hmmm, wg mnie gorszym wyborem niż C++ jest tylko PHP. C++ jest doskonałym przykładem jak uparta chęć utrzymania kompatybilności wstecznej (tutaj do C) może popsuć projekt języka. W C++ na kodera czeka mnóstwo pułapek, standard w kilku miejscach nie normuje pewnych rzeczy, inne aspekty układa nienaturalnie. Nie spotkałem się z technologią w której można tak łatwo przepełnić bufor, a program (o zgrozo!) potrafi działać w zamierzony sposób. Co to za język którego standard jest tak piekielnie ciężko zaimplementować. CL microsoftu będący w ścisłej czołówce kompilatorów na świecie nie jest w 100% zgodny ze standardem. Jeżeli chcecie polecać technologię jakiemuś zapeleńcowi, który nie przestraszy się wskaźników, to na Boga polecajcie ANSI C. C to kompletny język strukturalny, a C++ no niestety, gdyby nie wydajność programu wynikowego i kilka udanych narzędzi dodatkowych (np. BOOST-powszechnie uznany za rozszerzenie standardu) to język dawno by umarł.
A co do zdania, że najpierw trzeba poznać struktury danych itp. to napiszę tak. Jeśli kogoś programowanie rajcuje to zapewniam, że sam dojdzie do wszystkiego mimo wszechobecnej lewizny i pokus chodzenia na skróty jakie w dzisiejszych czasach czyhają na każdego młodego kodera. Znam jednego gimnazjalistę (no w sumie od września 1 rok LO) któremu do pięt nie dorastam.
p.s. 85% moich prac wykonuję w C++
EDIT
Mam takie wrażenie (być może mylne) że mało wypowiadających się tutaj userów miało kontakt z typowymi klientami programistów. Klienci zazwyczaj chcą mieć złoto w cenie złomu i to najlepiej na wczoraj. Sądzicie że klient doceni że zrobiłeś megawydajne GUI w asm czy WinAPI jeśli musiał czekać dwa dni dłużej na realizację zamówienia? Poza tym to "megawydajne" przy dzisiejszych narzędziach najczęściej oznacza zaoszczędzenie 0.3s na jakiejś akcji czego napewno nie zauważy.
fuck...znowu cegła mi wyszła :/
A więc jak w temacie. Po wielu godzinach szukania w internecie wreszcie znalazłem sposób na dostęp do portów.
Jak wiadomo w wersji 3.1 do dostępu do przestrzeni adresowej komputera służyły piękne polecenia outport, otportb, inport, inportb znajdujące się w bibliotece dos.h. Niestety w wyższych wersjach Borland wyrzucił te polecenia z listy rozkazów dążąc do zabronienia swobodnego korzystania z peryferiów komputera. Jedynymi opcjami było korzystanie z bibliotek WinApi lub pisanie programu pod Windows z gotowymi komponentami, co ograniczało dostęp do przerwań i wielu innych użytecznych funkcji układów płyty głównej. Oczywiście standardowo jest to wszystko co potrzebuje programista pod Windows. Mi niestety jako temat pracy zaliczeniowej padło pisanie aplikacji DOS-owej pracującej na zasadzie dostępu bezpośredniego do rejestrów układu scalonego ST16C550 (UART RS232)- miał to być taki DOS-owy Hyper Terminal z obsługą przerwań i FIFO. Rozwiązaniem na tą bolączkę okazał się freeware'owy program USERPORT do ściągnięcia tutaj:
Kod: Zaznacz całyhttp://hotfile.com/dl/37454463/8b2b732/UserPort.zip.html
Oto mały tutorial opisujący sposób odblokowania portów RS232 w komputerze z WinXP:
1. Ściągamy program i wypakowujemy wszystko w dowolne miejsce.
2. Kopiujemy plik UserPort.sys do katalogu ..Windowssystem32Drivers.
3. Uruchamiamy program UserPort.exe.
4. W kolumnie po lewej zaznaczamy adresy i wciskamy REMOVE, aż usuniemy wszystkie.
5. Odpalamy menadżera urządzeń i zaznaczamy COM1, klikamy jego włściwości, przechodzimy na zakładkę Zasoby i przepisujemy zakres adresów z menadżera do okienka powyżej adresów, które usuwaliśmy. Klikamy ADD.
6. Zaznaczamy zakres dodany wcześniej i wciskamy Start.
7. Cofamy się do punktu 5 i wykonujemy to samo dla COM2.
A tutaj sposób "odzyskania" naszych funkcji inportb oraz outportb:
Najprościej w pliku z programem umieścić:
Kod: Zaznacz całyvoid outportb(UINT portid, BYTE value)
{
__asm mov edx,portid
__asm mov al,value
__asm out dx,al
}
BYTE inportb(UINT portid)
{
unsigned char value;
__asm mov edx,portid
__asm in al,dx
__asm mov value,al
return value;
}
i oczywiście wcześniej zadeklarować te 2 funkcje.
W tej chwili mamy już dostęp do portów taki jak opisywany jest na różnych stronach za pomocą poleceń outportb oraz inportb programując w czystym C/C++, nie musząc znać się na assemblerze.
Opis ponownego zabronienia dostępu do portów jak i wstawki assemblerowe na inport i outport znajdują się w pliku PDF załączonego programu.
Nie wiem jak to działa pod systemami nowszymi jak WinXP.
cytat:Gall Anonim napisał:
Według mnie aplikacje oparte na VCL (np. Delphi) przeznaczone są dla bardziej zaawansowanych użytkowników niż początkująych. Lepiej jest poznać podstawy i zasady działania aplikacji ucząc się C lub C++ dopiero potem Delphi, ale nic nie stoi na przeszkodzie aby uczyć się od razu w Delphi, choć tego za bardzo nie polecam. Ostateczny wybór i tak należy do Ciebie. Najlepiej popróbuj każdego języka.
A ja bym powiedział, że na odwrót. Oczywiście, powinno być tak, jak Ty piszesz, ale niestety nie jest. Rzeczywiście, po VCL nie powinno się sięgać, jeżeli nie umie się stworzyć zwykłej aplikacji z conajmniej jednym oknem w WinAPI.
Co do języków, to bardzo mądrze pisze Igor. Nie ma języków trudnych. Owszem, w niektórych robi się coś trudniej, a w innych łatwiej, ale wszelkie trudności nie wynikają z budowy języka ale z nieumiejętności. Z doświadczenia wiem, że potrzeba czasu, by umieć w danym języku wyrazić to, co się myśli. Co do możliwości, to śmiało można powiedzieć, że ASM, C (oraz Objective C), C++ i ObjectPascal (Delphi) mogą wszystko. O ile ASM / C / C++ nie mają ograniczeń już z samego założenia, otyle jak czegoś nie da się zrobić w ObjectPascal, to robi się wstawkę Assemblerową.
Z mojego osobistego odczucia polecam C++. Poza tym, z tego co wiem, nie ma innego języka wysokiego poziomu o takich możliwościach, jak C++ (słyszał ktoś o szablonach w Javie? Ja nie, ale może są....).
Co do szybkości wykonania i rozmiarów kodu, to bezkonkurencyjny jest Assembler. Dalej idzie C/C++. Delphi chyba nie jest wiele wolniejszy, o ile nie korzysta się z VCL Borlanda (nie wiem, czy się tak da :D). Jednak nie liczy się 'wrodzona' szybkość danego języka, ale styl programowania. Trzeba znać język, wiedzieć, które elementy mogą spowolnić program, i jak tego uniknąć.
Jeśli chodzi o popularność języków, to na świecie najpopularniejszy jest C++, a w Polsce chyba Delphi (nie jestem tego do końca pewien). Najbardziej przenośnym językiem (wyłączając Javę) jest chyba C++, potem C, Assembler, i Delphi. Przez przenośność mam na myśli łatwość w dostosowaniu programu do kompilacji i uruchomieniu pod innym systemem. W C++ da się, przy odrobinie wysiłku napisać program, który bez zmian skompiluje się pod każdą, zgodną ze standardem platformą (takie podejście jest bardzo modne, zresztą słusznie, wśród programistów gier).
Dość już ględzienia. Proponuję C++. Jest to język wydajny, łatwy w nauce, łatwo się w nim wyraża myśli, jest popularny, i jest do niego w 'pierona' dokumentacji i pomocy. Jako przykład wymienię chociażby naszą polską społeczność programistów gier, czyli Warsztat (www.warsztat.pac.pl), gdzie większość programistów to doświadczeni C++`sowcy. Do nauki polecam Symfonię C++, potem Pasję C++; obie autorstwa Jerzego Grębosza. Jako alternatywę zalecam Megatutorial - Od Zera Do Gier Kodera (www.avocado.risp.pl) - najlepszy kurs języka C++, o jakim słyszałem.
Wybór języka to oczywiście sprawa osobistych preferencji, ale niezależnie od tego, w którym będziesz pisał, życzę Ci powodzenia i owocnej pracy.
Pozdrawiam,
TeMPOraL.
PS. Nie wiem natomiast, czy do Delphi powstają takie książki, jak Effective C++ i More Effective C++ Scotta Meyersa.
//================================================
KĄESACP: Komputer Ąwiat - Expert Society Against Crap Posting
To join: Put these lines in your signature and don't post crap!
"E = mc... dolen taken my notepad!" - Terran Science Vessel (StarCraft)
GG: 1488052 | temporal@poczta.fm | [url]http://www.temporal-software.prv.pl