Piszę takie coś asm(in r16,PINB); i też wywala błąd. Nie znam avr-gcc ale stawiam $100, że będzie tak: asm("in r16,PINB");
Error asm("nop\n"); Nie wiem co masz za IAR-a , ale mój to kompiluje prawidłowo i nawet taką składnię rozumie asm("nop\nnop\n"); No to zamiast nop-ów użyj np. __delay_cycles(2) . Piotrek
Tzw. inline assembler: http://www.nongnu.org/avr-libc/user-manu... i pdf: http://www.stanford.edu/class/ee281/proj...
GCC (którego używa DevCpp) nie obsługuje/obsługuje zupełnie inaczej kod assemblerowey wewnątrz funkcji (inline assembler). Dla Buildera/Visual C++ ten kod jest w zasadzie poprawny. #include <cstdlib> #include <stdio> using namespace std; void zapisz(char); int main(int argc, char *argv[]) { char liczba; printf("Wpisz...
to dopiero herezje.... tzw. inline assembler w keilu nie obsluguje rozkazow thumb i thumb2. embedded assembler obsluguje dowolny zestaw instrukcji. poczytaj manuala... funkcje pisane w asmie moga zwracac wartosc: w r0...
Nie prościej tak nie kombinować? Funkcje zdefiniowane wewnątrz definicji klasy (zwykle w nagłówku) są domyślnie traktowane jako z atrybutem "inline" i po co kombinować więcej? A już jakieś atrybuty "always_inline", to prosta droga to zabawy w assembler++, bo skoro kompilator uznał, że inline'owanie nie ma sensu, to zapewne tak właśnie jest.
Wstawki asemblerowe w AVRGCC można umieszczać w programie po instrukcji "asm volatile", zresztą najlepiej przeczytaj sobie "GCC-AVR Inline Assembler Cookbook" - znajdziesz go pod tym adresem: http://www.stanford.edu/class/ee281/proj... Pozdrawiam.
Zamiast pytać o to jak odwołać się do tego rejestru (co prawda można tworząc zmienną przez jakas_zmienna >>= 1; if(PS_WEJ&0x01) jakas_zmienna |= 0x80; nie tracąc na szybkości (3 cykle przy rejestrze IO dostępnym przez sbic/sbis, 3 przy innym rejestrze [sbrc/sbrs], 5 przy komórce pamięci). Ze względu na skrajny bit można to zoptymalizować,...
asm cortexa-m3 jest naprawdę prosty. wystarczy się zapoznać z dokumentacją, którą producent rdzenia udostępnia. Ja pisałem całe funkcje w tym asmie, bo inline assembler nie jest obslugiwany w keilu dla rozkazów thumb2 (nie wiem czemu, czasami byloby wygodnie). Często jednak jest tak, że kod C wygenerowany przez kompilator jest jednak lepszy niż to,...
gaskoin- to jeszcze- gdzie to jest? No i to: "It may be removed in a future release". No i szukam w manualu- i nic. User manual 1.7.0 No i nie mogę znaleźć: * Toolchain Overview * Memory Areas and Using malloc() * Memory Sections * Data in Program Space * avr-libc and assembler programs * Inline Assembler Cookbook * How to Build a Library * Benchmarks...
Ciągle możesz to zrobić, tylko użyj innych rejestrów, które są wolne. Tu masz o wstawkach: http://www.nongnu.org/avr-libc/user-manu... Inna sprawa, że może źle wybrałeś procesor, lepiej pewnie by poszło z XMega, raz, że działa do 32MHz, a dwa, że ma DMA, które może wyrzucać dane na DAC, bez konieczności robienia tego programowo. Co do...
To nie tak. Jak chcesz używać AVR Studio to musisz używać ich funkcji do zapisu / odczytu EEPROM-u. Funkcje kompilatora są napisane jako inline assembler i zapewniają, że opóźnienie między wystawieniem bitu Write Enable i zapisem (lub odczytem) będzie mniejsze niż 4 cykle. Jeżeli sam robisz taki zapis w C, to kompilator generuje ci więcej kodu i warunek...
jako "plik" ;] Dodano po 2 No tak jak zasejwowalem plik z koncowka *.c to jest juz lepiej czyli kod nabral kolorow ale dalej mam bledy . moze ktos mi powie co jest nie tak w takim krotkim kodzie #include <at91sam7s64.H> int main() { __asm { ADD R7,R6 ; sum up } return 0; } Bledy ktore pokazuje kompilator to : Build...
W pliku lpc17xx.h są zdefiniowane wszystkie makra odwołujące się do rejestrów peryferii, tak np. [syntax=c] /*------------- General Purpose Input/Output (GPIO) --------------------------*/ typedef struct { __IO uint32_t FIODIR; uint32_t RESERVED0[3]; __IO uint32_t FIOMASK; __IO uint32_t FIOPIN; __IO uint32_t FIOSET; __O uint32_t FIOCLR; } GPIO_TypeDef;...
"r" od "=r" różni się tym, że "r" jest stosowane przy wejściu (po drugim dwukropku), a "=r" przy wyjściu (po pierwszym dwukropku). Zmienne tymczasowe dawałem jako wyjściowe ze wstawek aby kompilator nie czepiał się do niezainicjalizowania zmiennej. Jeśli chcesz mieć zmienny adres, to nie możesz korzystać z sts, które zapisuje pod stały adres. Jeśli...
Lektury na początek: https://www.nongnu.org/avr-libc/user-man... http://ww1.microchip.com/downloads/en/de...
Assembler nie zna port_addres i port_data. Musisz to przekazać jako argumenty do funkcji ASM, które umieszcza się po dwukropku. Zobacz tutaj są przykłady: http://www.ibiblio.org/gferg/ldp/GCC-Inl... Inny sposób to oczywiście to taki jak kolega napisał powyżej, ale nie jest to całkowicie uniwersalne, bo będzie to działać tylko do...
Tak się składa, że wiem, że R0 jest wolny a każdy inny zajęty. Dziś jest wolny, jutro jest zajęty - obyś się nie przejechał. No i coś takiego nie działa, bo zmienna StackPointer Działa - potem R4 będzie przepisane do R0 żeby prawidłowo zwrócić wynik. jest ładowana do R4, który to ma być zrzucony instrukcją STMDB Wstawki assemblerowe są dużo bardziej...
Z opisu funkcji wynika, że pętla używa 8-bitowego licznika. Gdzie w tej funkcji jest odniesienie do licznika.? W tej linii: dec %0 Po prostu jeden z rejestrów jest używany do odliczania opóźnienia i dlatego został "przezwany" licznikiem. Nie ma to nic wspólnego z fizycznymi licznikami/timerami. O wstawkach assemblerowych możesz przeczytać w manualu...
eh... minuta szukania w helpie: C++ Language Reference Writing Functions with Inline Assembly Using C or C++ in __asm Blocks Microsoft Specific If you write a function with inline assembly code, it's easy to pass arguments to the function and return a value from it. The following examples compare a function first written for a separate assembler and...
Dokladnie tak samo. Pliki naglowkowe udostepniaja prototyp funkcji, na etapie kompilacji nic wiecej nie jest potrzebne. Dopiero linker to sklada razem, wiec zeby potrafil polaczyc twoj kod z tym w asm, musisz w asmie wyeksportowac nazwy publiczne (widziane w innych modulach) dyrektywa .global. Ale tu pewien bol jest - jesli obsluge LCD masz napisana...
Ścieżki:: $(ProjOutDir)\ reszta pusta Analiza:: Tryb.. :Object Pascal - deflaut.. zaznaczone opcje skladni: operatory w stylu jezyka C.., Pozwalaj na instrukcje LABEL, GOTO (-si), INLINE w stylu C++, Assembler style: domyslne Kod:: OPtymalizacje - Poziom 1; reszta odznaczona, Łączenie:: zaznaczone tylko Wyświetl numery lini.., Aplikacja graficzna win32.....
No ale co masz za problem z tym inline?
Tak opisane są wstawki w manualu do GCC i nie tylko... tak też się pisze ;) http://www.nongnu.org/avr-libc/user-manu... ale dzięki za chęci Pozdr
http://www.nongnu.org/avr-libc/user-manu... http://www.nongnu.org/avr-libc/user-manu... Chcesz to przenieść do avr-gcc? Czy do asemblera? Jeśli do gcc to prościej stworzyć plik .S i dołączyć go do projektu - w plikach .S stosuje się notację praktycznie taką samą jak w asemblerze AVR, jedyne co musisz uwzględnić przenosząc...
Dla mnie zmienia. Nie zmienia. Semantyka kodu pozostaje identyczna. Piszesz o optymalizacjach, tym się zajmuje optymalizator. Jeśli jest sprytny, to być może użyje zmiennych ze stosu funkcji wywołującej, a jeśli się nie da, to i tak zaalokuje nowe zmienne na stosie. Ty nie masz nad tym bezpośredniej kontroli, możesz co najwyżej kombinować z flagami...
No nie przesadzajmy, nie jest aż tak źle. Systemu operacyjnego nie musisz znać w całości, bo chyba nikt nie używa wszystkich jego funkcji, przynajmniej świadomie. Inna rzecz, ze jak już zaczniesz coś robić to ci się nie spodoba to co daje SO i zechcesz sam napisać jakiś mały kawałek lepiej, zwykle z powodzeniem. Kilka zastosowań assemblera jednak się...
Szkoda że im większą popularność zdobywają mikrokontrolery tym więcej powstaje środowisk typu "nic nie musisz wiedzieć by zacząć programować". Bo ja wiem. Ja tam jestem zadowolony z faktu, że w Atmel studio mogę napisać normalny program w pełni obiektowy na małego attiny2313 zamiast męczyć się w assemblerach czy kombinować w C. Przejrzystość kodu i...
Przy okazji przypomniało mi się, że nie warto wywoływać funkcji w przerwaniach (chodzi głównie o avr'y) - wywołana funkcja (według konwencji) może zmienić wartość rejestrów r0, r18-r27, r30, r31 oraz sreg Oczywiście dotyczy to jedynie funkcji łączonych zewnętrznie, tj. z biblioteki lub innej jednostki kompilacji. Funkcje statyczne w obrębie danego...
Kto nie użył nigdy INLINE w C niech pierwszy rzuci kamień... No i miłej zabawy w procesy krytyczne czasowo robione w języku wysokiego poziomu. Niestety, ale najczęściej przerwania w ASM, a aplikacja w C (przynajmniej ja tak robiłem w czasach Borlandowskiego Turbo C). W pełni kontrolowalne miał przerwania, praktycznie z każdego rozkazu można było się...
Rozumiem, że nie dopuszczasz tutaj rozwiązań oferowanych przez CMSIS, które z poziomu pliku startupa są chyba jednak funkcjami "C". Chodzi Ci o te funkcje inline, wrappery na instrukcje assemblera? Jak kod w C może "przeżyć" że mu podmieniasz nagle stos na zupełnie inny? Nie żebym to sprawdzał, niemniej jednak wydaje mi się, że dowolne czary nie są...
Witam , mam problem z kompilacją w WinAVR biblioteki USBDRV i pliku main.c . W innym projekcie gdziem mam taki sam plik Makefile i te same biblioteki wszytko się dobrze kompiluje a tu wywala mi błąd i nie mogę znaleźć przyczyny. W załączniku zamieszczam cały kod. Przy kompilacji wywala takie coś : D:\Projects\USB_avr2\usb_lpt>make... all avr-gcc...
Poczytaj tutaj: http://www.ibiblio.org/gferg/ldp/GCC-Inl... Do zmiennej odwołujesz się jako %0, %1 itp: const int c = 55; __asm__("movl %0, %%eax;\n\t" : /* bez operandów wyjściowych */ : "r"(c) /* c jest załadowane do dowolnego rejestru przed asm */ : "%eax" /* wartość EAX jest...
chociaż assembler arma to juz dla mnie czarna magia wolę c/c++ Widzisz, bo tak naprawdę, to zasada powinna być taka: piszę cały program w C (ew. C++, jeśli to ogromny projekt), natomiast w pewnych, krytycznych miejscach, dajesz funkcję jako inline asm wstawkę. To najlepsze imho połączenie technologii :)
To normalne, że podczas kompilacji występuję ten błąd ? (wytłuszczona część kodu podana pod listingiem) C:\Documents and Settings\XyX\Pulpit\bootloader_c_oraz_pr... all avr-gcc -Wall -Os -I. -mmcu=atmega8 -D START_DELAY_SEC=5 -D UC=atmega8 -D BAUD=9600 -D F_CPU=8000000 -D BOOTSTART=0x1E00 -fno-inline-small-functions -fno-split-wide-types...
No tutaj widać że masz zarezerwowane miejsce na stosie dla przekazywanych parametrów i nic nie jest "nadpisywane". Szczerze powiem nie wiem o co Ci chodzi. O to że spodziewałem się standardowego sposobu przekazywania parametrów, czyli kładzenia na stos (powodującego rozrost stosu). Tak przy okazji to jak dajesz taki kod do analizy to lepiej jak byś...
Pisząc w C tego nie wiesz i wiedzieć nie będziesz (chyba, że zajrzysz w wygenerowany przez kompilator kod assemblera - co swoją drogą jest czasami przydatne). Nie wiem jak daleko działa REGISTER, ale prawdopodobnie kompilator patrzy bardziej na to jak na mocną sugestię niż 100% wymuszenie, bo co by zrobił gdybyś zrobił 20 zmiennych int jako REGISTER?...
Hi Dzieki za komentarze poszedlem w druga strone i teraz instaluje zgodnie z http://vsdev.me/notes/setting_up_arm_gcc... Aha przywrocilem jeszcze z orginalnych przykladow static inline cpu_t get_cpsr(void) { cpu_t val; asm volatile ("mrs %[val], cpsr\n":[val]"=r"(val):); return val; } static inline void set_cpsr(cpu_t val) { asm volatile ("msr...
Zachęcony opiniami z innych tematów postanowiłem dopisać jakie są plany na kolejny release tego przykładu Zasadniczo mam już gotowy "startup w C". Cudzysłowy dlatego, że niestety ta zabawa wymaga funkcji inline, które implementują jedynie rozkazy assemblera (takie jak MSR choćby), również pętle inicjalizujące .data i zerujące .bss są napisane obecnie...
opcja "include" w c jest zarezerwonana dla bibliotek c, zazwyczaj piszesz #include <cośtam.h> Jeśli wstawki asm mają być krótkie to proponuje komendę inline(); jesli dłuższe to możesz zastosować __asm; Jeszcze inna metoda , ale już ściśle zależna od konkretnego kompliatora to opjca linkowania plików *.obj :( ale nie zawsze działa tak jak chcesz...
Fajna konstrukcja, choć uważam, że z minionej epoki. (teraz załóżmy, że cofamy się z 10/18 lat) Mógłbyś przejść z takim urządzeniem na bazar używanego sprzętu i wybrać tylko działające joysticki i je sprzedawać xD, lub prowadzić szybką naprawę. Bardzo podobają mi się listingi binarnego kodu wraz z opisem, sam to robiłeś? W kontekście macie jakiś pomysł...
Witam wszystkich, Próbuję się uporać z problemem od kilku dni, jednak nie bardzo wiem co jest nie tak, a mianowicie próbuje odpalić najprostszy program zmieniający stan na pinach: http://obrazki.elektroda.pl/2092017600_1... To jest stan po kilku kliknięciach step over, dodam że program potrzebuje 7 kliknięć step over aby zacząć się wykonywać...
Użycie cyfr jako lokalnych etykiet masz tu: http://ftp.gnu.org/pub/pub/old-gnu/Manua... Jest to bardzo użyteczne w funkcjach assemblerowych do kodu w C jeśli potrzebujesz w nich etykiet i specyfikatora inline. {cond} LO jest równoważny CC. Albert
Nie, żebym chciał cię do czegoś przekonywać, ale: - obecnie assembler stosuje się tylko tam gdzie to ma sens - czyli na naprawdę małych prockach, np. ATTiny10, gdzie nawet jeśli by się dało coś w C zrobić to nie miałoby to sensu, lub wymagało takich manipulacji linkerem, że traciłoby to sens. Asembler stosuje się też tam, gdzie optymalizacja jest niezbędna,...
Z tego co widzę z MIDE nie da się. Jedyne wyjście to używania dyrektywy, które pozwalają zrobić w ciele funkcji (tzw. INLINE). sdas8051 -los asm_func.asm sdcc main.c asm_func.rel Wtedy w pliku asm_func.asm funkcja w asemblerze napisana przez Ciebie, a w main.c zawartość kodu w C. BTW. Może lepszy niż MIDE będzie dla Ciebie [url=http://mcu8051idesourceforge.net/pr...
Tu nie chodzi o zapotrzebowanie, fizycznie jest to trudne do wykonania. Zauważcie, że przy kompilacji, optymalizator dużą część kodu zjada, czasem tnie na kawałki i trochę go przekłada. Nigdy nikt nie będzie w stanie przetłumaczyć ASM na logicznie napisane C. Choćby z tego powodu, jaki podałem w tym poście wyżej, lub z takiego, że w asmie makra typu...
Oczywiście że chodzi mi o optymalizację wprowadzoną przez kompilator, na optymalizację algorytmu przez użytkownika zawsze w jakimś stopniu chronią UT. Ja miałem problem właśnie z volatile, jakimś cudem kompilator zoptymalizował zmienną w dość niefortunny sposób co powodowało wywalenie się kodu. Co ciekawsze było to w examplu od ST a kompilowane pod...
jeśli wolno na chwilę wtrącić coś bardziej podstawowego , Ja zadam jeszcze bardziej podstawowe pytanie. Te całe magiczne optymalizacje związane z próbami wymuszenia na kompilatorze inline'owania funkcji - one mają jakiś normalny cel? Czy Twój program działa zbyt wolno do REALNEGO zadania jakie przed nim postawiłeś? Może nie wyrabia się w rzeczywistej...
Wszystkie te których używam (sqrtf(), powf(), acosf()) są liczone przez FPU? Niekoniecznie. W Newlib (czyli libm.a) nie ma implementacji specjalnie dla tego koprocesora, jednak jeśli masz włączoną optymalizację, skonfigurowane FPU (opcje kompilacji) i dodaną flagę -ffast-math, to kompilator niektóre z nich potraktuje jako funkcje inline i zastąpi odpowiednimi...
Moze zle sie wyrazilem - nie tyle skladnia pozostaje dla mnie niejasna, co nie umiem stwierdzic, dlaczego nie jest generowany plik ELF, pomimo tego, ze w pliku make istnieje regula (chyba) za to odpowiedzialna. # MCU name MCU = attiny45 # Processr frequency. # This will define a symbol, F_CPU, in all source code files equal to the # processor frequency....
Prawdopodobnie znowu optymalizacja jest przyczyną. Zmienna lokalna char *reszta; jest po optymalizacji w rejestrze, a do rejestru nie mozna wyłuskac adresu. Żaden kompilator nie umieści takiej zmiennej w rejestrze, skoro gdzieśtam potrzebny jest jej adres. Tak samo funkcje statyczne nigdy nie zostaną za-inline-owane jeśli gdzieś używane są ich adresy....
Po kolei. Jesli na plytce masz interfejs JTAG to mozesz debuggowac w ukladzie. Jesli nie (po ISP sie nie da) to pozostaje ci tylko symulacja programowa. I tu wszystko dziala ci jak nalezy. Funkcje z delay.h sa deklarowane jako inline, dodatkowo kompilator robi optymalizacje wiec nie spodziewaj sie, ze bedziesz szedl linijka po linijce. Zeby tak zrobic...
Wiem, wiem. Siedzę i próbuję skompilować nowy, ale jak krew w piach..... Próbowałem z tego wątku: http://www.elektroda.pl/rtvforum/topic23... U mnie wyskakują inne błędy - tak jakby kompilator nie miał praw zapisu pliku, jakieś błedne linki do katalogów itp itd, a cmd uruchamiam jako admin.... Dodano po 23 POSZŁO !!!! Nie mógł utworzyć: Fatal...
Nie miałem za bardzo czasu ale wracam do nierozwiązanego problemu. http://obrazki.elektroda.pl/7699775600_1... http://obrazki.elektroda.pl/3826926900_1... Tak wyglądają screeny po wywołaniu programu CRCGEN. Pliki wgrane programatorem działają poprawnie a przez bootloader tylko ten krótki (choć po przemieleniu ma także...
Po _powrocie_ z funkcji. Ewentualnie postaw sobie breakpointa w HAL_DMA_Start_IT() i wtedy zobacz. Do momentu w którym kompilator nie napotka czegoś co można by nazwać "ogólnym miejscem synchronizacji" (wywołanie funkcji nie-inline, powrót z funkcji nie-inline, dostęp do pamięci oznaczonej jako volatile, ...) to może sobie poprzestawiać te instrukcje...
(at)ElektrodaBot Jak konwertować kod 64-bit na 32-bit? /** (at)file Copyright (c) 2025, Gelip Copyright (c) 2024, Andri Kurniawan Copyright (c) 2020, Seungjoo Kim Copyright (c) 2016, Dawid... Bezpośrednia odpowiedź „Konwersja” istniejącego binarnego modułu UEFI X64 na IA32 nie jest możliwa - trzeba ponownie skompilować kod źródłowy z ustawieniem architektury...
Spróbuje i assemblera do prostych rzeczy Ciekaw jestem ile w swoim RTOS-ie kolega (at)Freddie Chopin napisał asemblera (stawiam ze pewnie ze 100 linijek jak już wyjścia nie miał)? Ja osobiście od dawna (poza kilkoma elementarnymi inline-ami do dsp) ani jednej. Te instrukcje procesora, które ew mogą Ci się przydać masz w CMSIS w postaci wygodnych definicji...
Tak jak obiecałem w pierwszym poście, załączyłem do tematu źródła. Kod jest napisany w C, kompilator gcc-avr w wersji 4.5.3-4 + biblioteki avr-libc 1.7.1-2. Jeszcze jeden filmik z "ekstrakcji" w HD :) http://obrazki.elektroda.pl/3325634700_1... http://obrazki.elektroda.pl/9288927500_1... (at)ADI-mistrzu: U mnie obsługa...
Moim zdaniem bardzo fajny projekt, jeśli chodzi o zaoszczędzenie miejsca na program, hym.. pewnie trochę można było zaoszczędzić gdybyś funkcje pomocnicze nie deklarował jako inline. Generalnie obsługa kilku czujników na jednej szynie nie jest zagadnieniem banalnie łatwym. Do czego stosujesz wstawki assemblerowe z instrukcją NOP? Rozumiem, że to wyczekanie,...
Na avr/gcc jeszcze nie próbowałem, ale jak mi tzreba cos podobnego na innych środowiskach, robie w C pustą funkcję o odpowiedniej nazwie i liście parametrów, każę kompilowac nie do zbioru binarnego tylko do źródła w asemblerze (zwyklwe jest jakaś opcja) i mam szkielecik funckji kompatybilnej z C (jakby w zbiorze .s). Modyfikuję, przepuszczam programem...
wprost nieobsługuje się przerwania nie rozumiem. O co Ci chodzi Ale jak RX nie jest volatile to kompilator uzna że nie może się zmienić w tej pętli while i odczytać wartości tylko raz. Później będzie porównywać tylko wartości rejestrów, Zobacz sobie jak to działa : https://godbolt.org/z/pKPEx2 wywołać którąś assemblerową instrukcję synchronizacyjną...
Próbuje rozgryść I2C w C, ale napotkałem mały problem. W kursie EDW do opóźnień używane sż wstawki assemblera, którego ni w ząb nie rozumiem. Zastanawiałem się czy jest możliwość zastąpienia ich opóźnieniami pisanymi w C? // Funkcja dłuższych opóźnień #if I2C_nhalf < 3 // Nic #elif I2C_nhalf < 8 static void i2c_xdelay(void) { NOP();...
Aktualnie mam prototyp programu (napisany naturalnie w asemblerze pod DOSem) ktory rozumie takie cos: ustaw gpio5 jako wejscie ala ustaw gpio6 jako wyjscie bela label: jesli ala ma stan wysoki Musisz nas nauczyć jak w DOSie się programuje RP gpio. Skoro to chodzący prototyp, to szacun. W czasach DOS czy Windows 9X ludzie pisali programy w asemblerze....
Mój program który stworzyłem na swoje potrzeby analizuje plik OBJ tworzony przez kompilator i pokazuje które rejestry zostały użyte podczas obsługi przerwania. Pozwala to na użycie parametru Nosave i znaczne przyspieszenie w przypadku Bascoma. Plik OBJ można oczywiście załadować do Atmel Studio i patrzeć na Assemblera, ale to niewygodne bo nie wszystkie...
Z pewnym opóźnieniem z powodu małej awarii, ale oto przykład: [syntax=c] #include <avr/io.h> inline void write_data(uint16_t data) { PORTE_OUT=data>>8; PORTF_OUT=data; } int main() { write_data(0xffaa); } [/syntax] I wygenerowany kod: [syntax=asm] 00000218 <main>: #include <avr/io.h> inline void write_data(uint16_t data) { PORTE_OUT=data>>8;...
Nie jest to możliwe, gdyż optymalizacja _delay jest zabroniona - zawiera ona volatile. Dlatego też napisałem właśnie, że wydaje mi się to dziwne - nie miałem pod ręką kompilatora aby sprawdzić czy tam jest volatile w środku. Czyli mój trop był błędny. Dodatkowo nie ma atrybutu zezwalającego na zastąpienie wywołania wynikiem funkcji (__attribute__(const))....
ARM7, Cortex-M3 to - powiedzmy - "handlowe nazwy" architektur, odpowiednio ARMv4 i ARMv7-M. Oczywiście nowsza jest ARMv7 czyli własnie Cortex. ARM7 jest już nieco przestarzały, a układ LPC2106 to w ogóle antyk - NXP od czasu tego układu wypuściło bardzo wiele fajnych układów z tym rdzeniem, dokładnie chodzi o rodziny LPC23xx i LPC24xx - LPC2106 to chyba...
wektor przerwania jest w pamięci FLASH - jak więc chciałbyś go zmienić? Wiem, że to niemożliwe dlatego pisałem o uzyskaniu efektu podobnego do nadpisywania wektora. możesz użyć do definicji tych funkcji atrybutu always_inline Dziękuję, właśnie coś w tym stylu miałem na myśli. Jestem po pierwszej próbnej kompilacji i kod (assembler) wygląda świetnie....
Każdy procek ma jakieś tam systemowe funkcje biblioteczne, które można zastosować, ale zazwyczaj zajmują one więcej miejsca niż proste rozkazy assemblerowe. (dochodzi chociażby rozkaz skoku do procedury). Czy warto z nich jednak korzystać? Np. dla STM'ów: __disable_irq (); będzie lepsze niz: __ASM volatile ("cpsid i"); ? "Twoja własna wersja" nie będzie...
Tutaj jest cały log : Dodano po 5 Zaktualizuj sobie soft w programatorze. Problem z tym jest o tyle, że z tego co czytałem (jeśli to nie prawda to poprawcie mnie) do tego potrzebny jest albo drugi programator albo żeby USBaps posiadał zworkę samoprogramowania. Na chwilę obecną dysponuję jedynie jednym programatorem i nie ma on żadnych wyprowadzonych...
Witam, muszę przekopiować projekt pod STM32F107 (Działający już) na CrossWorksie -> Eclipse, problem leży w makefile'u, ale nie mogę podejrzeć co robi ten crossworksowy, mój wygląda następująco: [syntax=c] ########################################... # Start of default section # TRGT = arm-none-eabi-...
Ok, punkty przesłałem. Mam jeszcze pytanko odnośnie tego inline. Jeśli odpalę debuggera to czas wykonywania się tej funkcji jest taki sam z volatile jak i bez. Jeśli używasz debuggera to sprawdź kod assemblerowy, jeśli funkcja wywoływana jest callem to najprawdopodobniej kompilator zignorował twój inline. Aby wymusić spróbuj w pliku nagłówkowym .h...
ok trochę czasu mi to zajeło ale udało mi sie przejść ten problem po przez edycje pliku makefile wyedytowałem 3 linie odpowiedzialne za wybór kompilatora i poszło. CC=avr-gcc OBJCOPY=avr-objcopy AVRDUDE=avrdude ale powstał kolejny problem mianowicie problem z plikiem demo.cof wiem że win avr zrezygnował z coff ale niewim jak poprawic makefile aby ten...
Witam Temat być może pojawia się po raz wtóry, ale poprzednie tematy nie rozwiązały problemu. Chcę wykonać prosty zegarek cyfrowy oparty na uC ATMEGA8(L) oraz wyświetlaczu LCD 2x24. Wszystko chodzi bez zarzutów, gdyby nie fakt złego odliczania czasu przez mój uC. Otóż mój ATMEGA8 pracuje z kwarcem zewnętrznym 8MHz + dwa kondensatory ceramiczne 22pF...
makefile ########################################... # Makefile for the project projekt ########################################... ## General Flags PROJECT = projekt MCU = atmega8 TARGET = projekt.elf CC = avr-gcc ## Options common to compile, link and assembly rules COMMON = -mmcu=$(MCU)...
Witam. Właśnie staram się zrobić mysz komputerową na atmedze 32 za pomocą biblioteki V-USB. Program testowałem na płytce rozwojowej z kwarcem 16MHz, atmegą 32 i wszystko działało. Po przeniesieniu się na moją płytkę z kwarcem 12MHz i przekopiowaniu kodu, na wyjściach D+ i D- mikrokontrolera nic się nie pojawia, D- stan wysoki, D+ niski. Oczywiście zmieniłem...
Ok ale czy zmiana stanu na IO zabiera aż 20 cykli? poza zmianą stanu nic innego się tam nie dzieje ;] funkcja zmiany stanu na wyprowadzeniu: [syntax=csharp] static __INLINE void GPIOSetValue( uint32_t portNum, uint32_t bitPosi, uint32_t bitVal ) { LPC_GPIO[portNum]->MASKED_ACCESS[(1&l... = (bitVal<<bitPosi); } [/syntax] oraz odczyt:...
Jest to wg projektu z EdW: ////////////////////////////////////////... // harddef.h - definicja sprzętu dla programu testującego możliwości wyświetlacza z noki3310 // przeznaczenie: "Programowanie procesorów w języku C (EdW)" // ////////////////////////////////////////...
Hej, tutaj wklejam kod z lekcji 13 ////////////////////////////////////////... // main.c - plik główny programu testującego możliwości wyświetlacza graficznego z telefonu nokia3310 // przeznaczenie: "Programowanie procesorów języku C (EdW)" // // Autor: RadosĹ‚aw Koppel...
Witam. Zakupiłem konwerter I2C do wyświetlacza LCD i mam mały problem z jego obsługą. Komunikacja z ekspanderem następuje prawidłowo, jedynie co udało mi się uzyskać to miganie podświetleniem, ale uparty wyświetlacz za choinkę nie chce nic wyświetlić. Schematu konwertera niestety nie posiadam, gdyż producent go nie udostępnia. Kod którego używam prezentuje...
Witam. Mam problem z poprawnym działaniem bootloader'a. Paczka ściągnięta ze strony main.c (dodałem linijkę dla mojego procesora) bootloaderconfig.h (zmiana portów oraz linii wywołującej bootloader) Makefile (zmiany dotyczące procesora) http://obrazki.elektroda.pl/4178945300_1... http://obrazki.elektroda.pl/5075291300_1...
Witam szanownych forumowiczów! Od niedawna staram się nauczyć języka C na AVR. Postanowiłem zbudować poza migającą diodą LED i całą resztą "mini projektów" odbiornik sygnału DMX. W zamierzeniu chcę zrobić DIMMER PACK (sterowanie jasnością 4 urządzeń, stąd 4 kanały i detekcja przejścia przez zero). Jednak przy pisaniu programu napotkałem dość znaczące...
inline function inline static static inline
radio grzać końcówka poziomować światła kupić tranzystory 2sc2166
przesterowanie wejścia tunera wsady biosu
Menu serwisowe Philips 40PFL3107 - jak uzyskać dostęp? Oryginalne worki Miele a zatarcie silnika odkurzacza