Freddie Chopin - dzięki za podpowiedź, w wolnej chwili poczytam. Michałko12 - oczywiście masz rację, użyłem skrótu myślowego, chodziło mi o static const typ nazwa_zmiennej = wartość , by była to stała we Flash. Pozdrawiam, KT
(at)wojlej 1. sizeof char jest zawsze równe 1 więc jest tu zbędne 2. Dwa razy kopjuesz dane. Najpierw do tablicy a później do struktury. Szybciej będzie bezpośrednio odczytywać do struktury tak: [syntax=c] char *tab = (char*)&Struktura_odczytana; for(i = 0; i < size; i++) { tab[i] = Read_EEPROM_BYTE(1+i); //Adres względny - sektor 7 } [/syntax]...
Witam! Eclipse Kepler Sourcery CodeBench Lite 2011.09-69 OpenOCD 0.6.1 STM32F103ZET6 Szablon projektu - Freddie Chopin Do tej pory wszystkie projekty na STM32 działały dobrze jednak teraz buduję większa aplikację i pojawiają się problemy. Objawia się to losową zmianą wartości zmiennych np. zadeklarowanych jako const czy przerwaniem __Default_Handler....
Witam, Bazuje na projekcie ze strony Freddie Chopin dla stma F4 z dodanymi bibliotekami STM32F4xx_StdPeriph_Driver. Zdefiniowałem sobie konfigurację timer'a w następujący sposób: [syntax=c]void Timers_Config(void){ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TI... ENABLE); NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = TIM1_CC_IRQn; NVIC_InitStruct.NVIC_IRQChannelPreemptio...
"const/static/volatile to magiczne zaklęcia dla mikrokontrolera, który wie, że oto czyta specjalne i bardzo bardzo ważne tajemnicze instrukcje, które musi wykonać dokładnie tak jak napisano i bez żadnych nadinterpretacji". Klaatu... verata... n... Necktie. Nectar. Nickel. Noodle. Nie rozumiem. To Twoje wytłumaczenie tych pojęć? Czy może imputujesz...
Tyle że const powinno być w prototypie funkcji: I oczywiście w prototypie też jest, inaczej kompilator pyskuje:) A walczysz o każdy cykl zegara, że podstawienie wartości do rejestru i zwiększenie objętości programu o 4 bajty jest takim problemem? Nie walczę, ale zwiększanie nawet o cztery bajty programu tylko po to aby pozbyć się ostrzeżeń?
P.S. "volatile const" nie ma zbytnio sensu... Jedno przeczy drugiemu... W tym przykładzie nie ma, ale zupełnie nie przeczy. Np. tak powinieneś deklarować rejestr sprzętowego RTC. http://www.informit.com/guides/content.a... Albert
Chyba już wiem o co biega. Porcedurka EEPROM_read() powinna wyć podobna jak w pliku eeprom.h: /** \ingroup avr_eeprom Read one byte from EEPROM address \a __p. */ __ATTR_PURE__ static __inline__ uint8_t eeprom_read_byte (const uint8_t *__p) { do {} while (!eeprom_is_ready ()); #ifE2END <= 0xFF EEARL = (unsigned)__p;...
nie żadne "volatile", tylko po prostu "const". Zmieniłem. Swoją drogą to nie wiem czy atrybuty można łączyć tak jak pokazałeś, na pewno można je łączyć po prostu po przecinku wewnątrz nawiasów. Kiedyś o to pytałem i wyszło że można i tak. Choć krócej będzie po przecinkach. Pozamieniam. Twoja tablica nie jest wgrywana, bo dałeś noload - to chyba powinno...
HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeDef *husart, uint8_t *pTxData, uint16_t Size, uint32_t Timeout); Nie wiem - tyle ze uznali ze poniewaz mogą to nie należy nic const - antować. Nie jest to oczywiście jedyny przykład, po prostu pierwszy jaki mi przyszedł do głowy. No i te ich pożałowania godne "callbacki"... Nie neguje nędzności biblioteki,...
(at)Freddie Chopin , z tym 'const' good point ;) Tego akurat nie uważam za szukanie dziury w całym. Jednak skoro się zaangażowałeś, przejrzałeś bloga, udzielasz się w temacie, to zamiast pisać: Ty również należysz do ludzi, którzy nie wiedzą do czego służy const... A szkoda... nie mogłeś napisać, że powinno być i uzasadnić? BTW - autor słówko "volatile"...
W funkcji nie będziesz mógł zrobić czegoś takiego pomimo że przekazałeś tablice z ramu: void logoBMP(const unsigned char *bufer) { bufer Dodano po 4 const char const * l_wartosc Chyba trochę za dużo tych constów, nie sądzisz? 4\/3!! Właśnie chyba nie, wydaje mi się że bez któregoś z const kompilator umieszczał wskaźnik do tablicy wskaźników w ramie...
Bez reinterpert_casta na uint8*. Zrób funkcję przyjmującą const void* i po problemie, żadne rzutowania nie będą potrzebne. Popatrz na prototypy np. fwrite, memcpy itd. Dokładnie taką implementację mam :) Moja wypowiedź związana z tym reinterpret_castem na uint8* dotyczyła tego, że musiał on by być, gdyby te funkcje przyjmowały const uint8* :)
Na tego hala szkoda słów. Ano... Widać nadal nie opanowali słówka "const"... (; 4\/3!! Choć MISRA200.. ileś się chwalą;D
No bez przesady. Programuje się go akurat trudniej, przecież masz różne tryby 16 i 32 bitowe, złożone adresacje itd. A co mnie to obchodzi pisząc w C albo C++? Nic. Programuje się to prościej, m.in. dlatego że jak chce mieć stałą we flashu, to piszę "const" i już, a nie niekończące się zabawy z PROGMEM i wszystkie związane z tym problemy (różny sposób...
Ruch jednostajny z małym przyspieszeniem? Czy gdy a=const ma znaczenie wartość a? EDIT: tak miałem na myśli jednostajnie przyspieszony ;> sry za błąd Pudło. Po co mam się rozpędzać do setki w 2 sekundy i potem jechać tą setką przez minutę, żeby potem 2s hamować, skoro mogę przez 30 sekund rozpędzać się do jakiejśtam prędkości (nie chce mi się liczyć...
Przy okazji widać jak się większość zna na programowaniu, skoro w całym tym temacie słówko "const" w prototypie funkcji pojawiło się tylko raz, w poście mi14chal - we właściwym miejscu oczywiście... A ja się dziwiłem, że w całym bzdurnym SPLu też go nigdzie nie ma... No bo tutaj słówko const jest potrzebne, ale widać inni wiedzą lepiej. A co do SPL...
Mam tablicę ze zdefiniowanymi fontami, które bede chciał wrzucić potem na wyświetlacz: Przecież to się nawet nie kompiluje, bo jest niepoprawne składniowo (i nie chodzi mi tu o trywialną kwestię kolejności)... Te okrągłe nawiasy? Prawda.
My tu o ARMach, ty o AVRach, A gdzie to jest napisane? a nie od dziś wiadomo, że na avr-gcc (ze względu na architekturę harwardzką) słówko "const" jest nic nie wartym zlepkiem literek.4\/3!! To nie ma znaczenia. Dodanie innych magicznych słów powoduje wygenerowanie rozkazów dostępu do flasha, ale adresy nadal są generowane takie jakby stałe miały być...
Funkcja taka powinna przyjmować wskaźnik na "const char*", skoro i tak go nie zmienia (wiem że go nie zmienia, bo jakby próbowała, to byś miał zwiechę przy stringach z flasha) i wtedy problemu nie ma. Taki dobry nawyk (; Jeśli "parametr wskaźnikowy" nie jest modyfikowany, to powinien być const i tyle. Kompilator czepia się całkiem słusznie, bo zakłada,...
nope, to nie dziala można by stworzyć jedna strukture z *nazwa a pozniej strukture z wskaznikami do tej struktury, ew tablica tych struktur ... i powinno wyjsc na to samo :) fajnie że działa, rozwiązanie takie młotkowe troche ale ważne że działa :)
Racja, przeciez to logiczne. Po dodaniu najzwyklejszego opoznienia printf wreszcie dziala :) Chcialem jeszcze dopisac obsluge operatora \n wiec zmodyfikowalem funkcje __vfprintf w taki sposob jednak nie dziala: static int __vfprintf_(printf_file_t *stream, const char *format, va_list arg) { char character; stream->length=0; // clear...
Objaśnisz kilka słów więcej? W kodzie jest "volatile uint8_t *PORT;", co oznacza najzwyklejszy na świecie wskaźnik na "volatile uint8_t". Dzięki. Zaćmienie, jeszcze się kawa nie rozpuściła, w pełni rozumiem ... Żeby było śmieszniej, sam użyłem podobnej idei do stworzenia poziomu abstrakcji nad pojedynczym pinem (ale wolałem użyć referencji do portu...
Taki kod jest po prostu bezsensowny i tyle. Kod z inicjalizacji _jest_ sensowny i _działa_. Jak napiszesz: #define STALA 12345 char* ptr=&STALA; to wydaje Ci się, że to jest poprawne? To nie jest poprawne i nie skompiluje się z prostego powodu - twoja stała jest dyrektywą preprocesora, czyli zostanie rozwinięta jeszcze przed kompilacją programu. Kompilator...
Jeśli stosujesz wzorzec "dependency injection", to po prostu trzeba go stosować "na całego" - Twoja funkcja buildSPI() powinna tak samo przyjmować referencje na selektor (choć wtedy oczywiście nie ma ona większego sensu). Albo jeśli dobrze myślę, mogłaby też definiować selektor jako statyczny, prawda? Jeśli w rzeczywistej aplikacji nie planujesz tworzyć...
Freddie Chopin , tak już jest jak ktoś nie śledzi wątku i jego idei (; Tylko opiera się na tytule tematu... Wyobraź sobie, że śledzę ten wątek od początku i naprawdę nie rozumiem co zacytowane przeze mnie we wcześniejszym poście zdanie miałoby oznaczać... Nie wiem czemu niby na innych toolchainach z innymi bibliotekami można się oprzeć tylko na jakichś...
wynikGSM faktycznie jest wskaznikiem , ale const . A zapisanie czegos do consta to jak mieszanie stwardnialego gipsu :] Dlaczego Podejrzewam jednak, że "oni" mieli rację, tylko Ty źle zrozumiałeś... ? Ano dlatego, ze gdy wpisujesz zero pod wskaznik nie-const ktory wskazuje na pierwszy element tablicy to szlag trafia tablice. Dane zostaja w pamieci,...
Twoja stała to 16,11328125 - jeśli nie widzisz problemu, to trudno... chodziło mi o to że stała obliczana na postawie wzorów np: [syntax=c] //R1, R2 [ohm], Vref [mV] #defineR11000 #defineR24000 #defineVref5000 #defineADC_const(Vref/1024)*(R1+R2)/R1 ... wynik_w_mV=ADC*ADC_const [/syntax] stałą obliczy kompilator więc dla mikrokontrolera zostaje wyłącznie...
tymon_x - Ty masz te funkcje read(), write() itd tylko dla SPI czy ta sama funkcja robi też coś innego? Jeśli to są "typowe" funkcje open(), read(), write() to jak zmapowałeś struct spi na "int fd"? 4\/3!! Swoje :) [syntax=c]struct dev { struct queue in; struct queue out; }; struct header { u32 length; }; #define DEV(p) ((struct dev*)p) #define HEADER(p)((struct...
W tamtym temacie pokazałeś błąd w funkcji xmit_spi_multi(). Gdzie on jest, bo ja go nie mogę zauważyć? ? Dodano po 18 Gdzie tu jest głąd? [syntax=c]/* Send a data block fast */ static void xmit_spi_multi(const BYTE *p, /* Data block to be sent */ UINT cnt /* Size of data block */ ) { do { while (!(SPI2->SR & SPI_SR_TXE)) ; SPI2->DR = *p++; while (!(SPI2->SR...
Ale wiesz, że to nie jest to samo co `value Pomyliłem się przy pisaniu, oczywiście miało być *(value+11). Opcja kolejki jest mało sensowna, chyba że interesują Cię odczyty z przeszłości, nie wiadomo jak stare, ale potencjalnie bardzo stare, bo kolejkę dopychasz na maksa a odczytujesz tylko okazjonalnie. Do tego co robię wydaję się odpowiednia gdyż...
Zauważ np. że gry komputerowe - które już jednak się tak nie czołgają i jednak z każdą kolejną generacją komputerów wyglądają znacząco lepiej - nie są pisane w assemblerze. Są pisane w języku, który na tym (i każdym innym forum o mikrokontrolerach) uznawany jest za synonim wolnego i przerośniętego kodu - C++. Freddie nie znęcaj się. Zawsze mity żyją...
Dzięki (at)Freddie Chopin gdb w wersji poniżej wersji < 8.3 w moim projekcie niestety zrezygnowało ze współpracy (może projekt za duży (ok 800k kodu i g3) - nie wiem). [syntax=c]/tmp/jenkins/jenkins-GCC-7-bui... internal-error: type* copy_type(const type*): Assertion `TYPE_OBJFILE_OWNED...
jak wiadomo C++ jest głupie Och, nie o to mi chodziło. Z pierwszym ostrzeżeniem nie mogę sobie poradzić i nie mogłem już wcześniej. Drugi natomiast powoduje różnica typów danych. Nie wiem jak tą zmienną zamienić na const char ale długość jest chyba taka sama więc nie powinno być z tym problemu. Wcześniej ten kod działał. To tylko program testowy. =>...
Zwykle program doliczy inicjalizatory dla .data do sekcji która mu najbardziej pasuje, strzelam że będzie to sekcja znajdująca się w odpowiedniej pamięci jako ostatnia przed .data - jeśli taką sekcją jest .rodata, to właśnie tam Ci ją może doliczyć. Zauważ jednak, że w skrypcie linkera nie ma wcale zadeklarowanego, że te inicjalizatory mają być w .rodata...
Hej, Podpinam się pod posta. Próbowałem wrzucić funkcję pod wskazanym adresem, ale mi się nie udało :). Postanowiłem wrzucić zatem jakąś zmienną pod wskazany adres no i z podobnym rezultatem. Tak jak w poście postępuję: MEMORY { rom (rx): org = 0x08000000, len = 128k - 18k BOOT(rx): org = 0x0801B800, len = 18k ram (rwx):...
Korzystam z gotowca Freddie'ego Chopin'a dla uC stm32f103 i używam CodeSourcery. Mam następujący problem: Próbuję obliczyć splot korzystając z funkcji: Linking target: out/stm32_blink_led.elf arm-none-linux-gnueabi-g++ -mcpu=cortex-m3 -mthumb -TSTM32F103xB_rom.ld -g -Wl,-Map=out/stm32_blink_led.map,--cref,... -Wl,--gc-sections -nostartfiles...
(at)starob: dzięki za naprowadzenie. (at)Freddie Chopin: fakt, zupełna głupota. Co prawda bawiłem się wskaźnikami, lecz za dużo obliczeń i w dodatku dodatkowe obliczenia dla 1 "linii". Wybrałem wersję tablicową: warning: assignment discards 'const' qualifier from pointer target type [enabled by default] picture = &image->data[...
Witam Na wstępie środowisko środowisko na bazie tutorialu Freddie Chopin-a , z dołączonym "STM32F10x_StdPeriph_Lib_V3.5.0" Płytka bazowa ZL27 Kamami. Kompilator CodeBench Lite for ARM EABI Praca bez systemu operacyjnego (na ARM) Problem jest następujący. Chciałem uzyskać możliwość pełnego wysyłania danych przy pomocy Printf na wiecej niż standardowe...
SPLa przestał żyć. Nie przesadzaj - przecież ten cały STM32 Cube i będący jego częścią "HAL" (równie adekwatna nazwa jak "SPL"...) to SPL z minimalnie pozmienianym API. Dalej jest tak samo badziewny i napisany przez kogoś kto "nie ogarnia" programowania (wciąż brak jakiegokolwiek "const" przy wskaźnikach - na to chyba nigdy nikt tam nie wpadnie). Często...
mój Distortosowy projekt ma problem z rozmiarem binarki. W tej chwili Distortos + USB host + FatFS zajmują ok 50kb. Ty to tak na poważnie czy to czysto teoretyczna dywagacja? STM-y z USB OTG poza kilkoma modelami (do drona sądząć po nazwie katalogu to chyba nie użyłeś takiego z 64 FLASH) mają min 128kB (a jeżeli wywalimy "odpadowe" H7 i F7) to min...
Jesteś pewien, ze nie uint32_t? Bo jak mnie pamięć nie myli uint16_t wśród rejestrów występował tylko w USART-cie i USB. Nie jestem, ale to bez znaczenia - typ docelowej zmiennej w przypisaniu "cośtam = SPI1->DR;" jest kompletnie bez znaczenia, odczyt zostanie zrealizowany w taki sposób jaki jest narzucony przez typ samego SPI->DR. Jeśli DR jest zdefiniowane...
Finalnie po babraniu się w wolnych chwilach, udało mi się wreszcie porównać (przetestować) kilka algorytmów do konwersji zapisu binarnego do reprezentacji w kodzie BCD. Zrezygnowałem z jakiś własnych hacków i implementacji, ale skupiłem się na kilku popularnych metodach. Szczegóły można znaleźć w http://obrazki.elektroda.pl/4926512300_1...
AVR GCC z pakietu WinAVR 20080610 jest bardzo agresywny i przy optymalizacji często nieskończona pętla while(1) zostaje przekształcona w RJMP +0 i... reszta programu jest pomijana! Doświadczyłem tego sam, jak i parę innych osób - nawet na tym fourm. Umieść kod tak, żebym mógł go skompilować, bo jak zwykle nie wierzę. Mam ten kompilator, korzystam i...
Hej Freddie, tym razem to już mam poważny problem i proszę Cię o pomoc. Problem mam cały czas z przerwaniami. Nigdy mi w sumie tak naprawde nie zadziałaly na tym projekcie od stm. Przerobiłem Twoją tablice wektorów przerwań: /** \file vectors.c * \brief STM32 (STM32F101 - STM32F103) vector table and __Default_Handler() * \details STM32...
Problem jest też taki, że na który poziom abstrakcji by się nie wznosił, to np. brak dostępu do zasobu jest brakiem dostępu do zasobu - i tak muszę czekać. Ale tego chyba nikt nie przeskoczy - chyba, że np. zastosujemy więcej kanałów SPI, I2C, itd.... Przykładowo mam bufor w RAM'ie na dane wysyłane do GLCD. Tyle bajtów, żeby wypełniły cały ekran wyświetlacza....
Zamiast bronić serii błędów raczej uwzględnij uwagi, które dostajesz Ależ ja chwale sobie twoje uwagi, szczególnie że jesteś nielicznym który podjął się konstruktywnej krytyki. Natomiast z powodu założeń, w 30% nie do końca mi pasują. Może jestem niezbyt zdolnym uczniem i potrzebuje czasu. Programując w tym stylu daleko nie zajdziesz. Całkiem możliwe,...
Witam ponownie, W STM32F3 SPI jest tak samo dziwne jak STM32F0, więc zapis/odczyt do/z rejestru DR trzeba realizować przez magiczny wskaźnik, gdyż inaczej SPI wysyła/odbiera 2 bajty. Postanowiłem sprawdzić jak to jest w STM32F4, konkretnie użyłem płytki STM32F429I-DISCOVERY i napisałem naprędce poniższy programik: [syntax=c] 1 2 /***************************************...
Witam Jak wyliczyć coś takiego za pomocą preprocesora ? Criterion for valid user code: The reserved Cortex-M0 exception vector location 7 (offset 0x 0000 001C in the vector table) should contain the 2’s complement of the check-sum of table entries 0 through 6. This causes the checksum of the first 8 table entries to be 0. The bootloader code checksums...
no i teraz dla odmiany stosujesz dwa skrypty linkera... -T AT91SAM7S256_RAM.ld -T generic-hosted.ld to chyba nie jest najlepsze z rozwiązań... 4\/3!! Bez generic-hosted.ld jest masa unresolved externali. Gdzies na zagranicznym forum znalazlem, zeby dodac to do opcji linkera. Wywale wszystko i zainstaluj yagarto. Zobaczymy jak to wyjdzie... Dodano po...
freddie chopin freddie chopin płytka freddie chopin atmega
moduł komfortu mazda ściemniacz światła pilot kyocera drukuje czarne
schemat hyundai iveco 35c13 schemat
Dinli 450 – kasowanie czerwonego kluczyka, immobilizer, reset błędu, programowanie klucza Zasilacz impulsowy 36V DC – skaczące napięcie 20-30V bez obciążenia, diagnostyka Mean Well, TL431, ESR