No ale zrozum, że w każdym module w którym includujesz ten plik tworzy się kolejna kopia tej zmiennej a linker podczas linkowania próbuje ustalić adres takiej zmiennej i stwierdza, że ma kilka o takiej samej nazwie więc zgłasza błąd. Do tego co ty chcesz uzyskać służy słowo kluczowe extern
kiedy uda mi się tak zrobię to w trybie circular. Czy jesteś pewien, że o to Ci chodzi? DMA działa asynchronicznie do programu i w trybie cicrular nonstop wypycha w UART zawartość tablicy TxBuf. Program zapełnia tę tablicę w swoim rytmie, a DMA zupełnie niezależnie wysyła jej zawartość. W znakomitej większości wypadków wysłane będzie część nowej zawartości...
Jest też opcja, że w nagłówkach brakuje extern "C", choć to raczej mało prawdopodobne... W każdym razie kod DSP/math z CMSIS nie jest tylko w nagłówkach, całkiem sporo funkcji i wszystkie stałe/zmienne są w normalnych plikach .c, które sobie trzeba dodać do kompilacji. Inną opcją jest użycie tej biblioteki jako biblioteki statycznej, czyli plik .a,...
W c++ przed funkcjami obsługi przerwań dodaj extern "C" np.: extern "C" void DMA2_Stream0_IRQHandler(void) { ... } Inaczej nie będą wywoływane.
extern należy dodać wtedy gdy dołączamy ten sam plik .h kilka razy (zresztą kompilator nas o tym uprzejmie poinformuje). Wskaźnik jest zmienną wskazującą na dane w obszarze flash i jest umieszczony w RAM'ie'. Wskaźnik może wskazywać również na dane w RAM'ie.
Tzn, że program może działać dalej poprawnie a debuger wskazuje na to, że jesteśmy w np HardFaultHandlerze ? Mógłbyś nieco rozwinąć myśl ? Czasem może być jakiś problem sprzętowy/programowy/systemowy, który może spowodować wywalenie się debuggera, który będzie np. uparcie twierdził, że jesteśmy wciąż w jakiejś linii, choć mikrokontroler sobie wtedy...
Według mmnie masz problem w innym miejscu i bo static tam nie jest potrzebny. Sam na to nie wpadłem, że przy tej zmiennej powinien być static. Ogólnie to były czasy FreeRTOSa w wersji 5.xxx (2007 rok) i do tej pory w necie krąży sporo przykładów z modyfikatorem static przy tej zmiennej. Rzeczywiście w obecnym projekcie nie używam już statica przy tej...
Można po prostu nie załączać do zródeł kompilowanych przez kompilator C, nagłówków zawierających składnię C++... Jeżeli chcesz używać generatora, po prostu cały kod używający konstrukcji C++, zamieszczasz w osobnym pliku, który będzie kompilowany przez kompilator C++ i wołasz z main.c jakąś funkcję, która została napisana w C++. Funkcja oczywiście musi...
Dałem sobie spokój z CHATGPT i zmuszam moja mózgownice do wysiłku , czyli przypomnienia sobie co nieco z starych czasów. ARDUINO też leci w kulki, biblioteka LCD która wykorzystałeś w przykładzie "hello world"ma zamienione miejscami wiesze z pozycje kursora ......... co za logika !!!!!!!! najpierw WIERSZ a potem KURSOR !!!!. tak też napisałem kod więc...
Dziękuję raz jeszcze, po zmianie, którą zasugerowałeś chodzi nawet z kalibracją. Masz i wprawę i czujesz sprzęt, ja tego nie mam i zazdraszczam. To jest mój pierwszy program na ARMie - wszystko nowe, tylko ja stary. W bazodanowym programie pod Windows rzadko używa się operatorów bitowych. A sam system dba bardzo abyś do sprzętu bezpośrednio odwołać...
Bo może wektor przerwań dla tego akurat kanału DMA się nazywa inaczej? Porównaj nazwę Twojej funkcji z zawartością tablicy wektorów. Jeśli masz w projekcie pliki C++, to trzeba przerwania deklarować jako extern "C". 4\/3!!
Witam. Po ogarnięciu portów i/o chciałem przejść do konwersji ADC. Początkowo zakładam, że nie korzystam z przerwań, nie korzystam z DMA. Screeny z Cube: http://obrazki.elektroda.pl/6506556500_1... http://obrazki.elektroda.pl/5974943000_1... http://obrazki.elektroda.pl/2033015600_1... Plik main: /** ****************************************...
kombinuję też, że może za późno wywołuję funkcję fpu_enable()? W sumie to przed nią tworzy się obiekt IMU. To mogłoby mieć znaczenie tylko jeśli konstruktor tego obiektu w jakiś sposób robi coś "zmiennoprzecinkowego". Jeśli tylko zeruje zmienne w pamięci, to raczej bez znaczenia. Jednak gdy robię to tak: W pliku .cpp ta funkcja musi być zdefiniowana...
Witam Mam następujący problem przy płytce STM32F0Discovery. Celem programu jest na poziomie obsługi przerwania ustawienie globalnej zmiennej, a następnie po powrocie do maina sprawdzenie zmiennej i wykonanie instrukcji. Kod pliku main.c [syntax=c] #include "stm32f0xx.h" #include "setup.h" volatile bool new_data = false; int main (void){ setup(); while(1){...
Problem rozwiązany :) "Wystarczy" stworzyć na początku takie oto dwie zmienne: [syntax=c]char time_zone[]="TZ=CET-1CEST,M3.5.0/2,M10.5... extern char* __env;[/syntax] time_zone ma wartość odpowiednią dla polski. Jeśli będą chętni to wyjaśnię co robią poszczególne "znaczki". Po tym zabiegu na początku main dajemy takie coś: [syntax=c]__env = time_zone;...
Widzę że dosyć cich. dorzucam jeszcze skrypt linkera i startup. nawet mam brakepointa w void Reset_Handler(void) i w niego nie wchodzi. ale na brakepointa w Default_Handler reaguje. Zanaczam że jak wgram program na mikrokontlorer to działa bez zarzutu... [syntax=c]/* Procedura startowa dla STM32 connectivity line devices */ /* NastÄ™pujÄ…ce...
Dzięki za wszelkie wskazówki Panowie, na przyszłość będę bardziej świadomy. Szczególne dzięki dla Pana Freddie Chopin. Doczytałem na temat specyfikatora extern, nie dodawałem definicji zmiennej ale usunąłem owy specyfikator, problem znikł. Na tą chwilę nie wiem jeszcze czy to dobra praktyka ale pomogło.
Witam, Mam problem z nawiązaniem komunikacji między dwoma zestawami STM32F103ZET6+nRF24L01. Bazowałem na informacjach z tej strony: "[url=http://maniacbug.github.io/RF24Net... Ściągnąłem odpowiednie pliki z klasami RF24 i RF24Network, oraz klasą SPI(wykorzystywana przez poprzednie klasy), przerobiłem je pod STM32, po czym spróbowałem...
michalko12: Zmieniłem xHandleTaskLED1, xHandleTaskLED2 na static, ale nic to nie pomogło. xLastFlashTime nie można: error "initializer element is not constant". W keilu żadnej tej zmiennej nie miałem jako static a program działał więc podejrzewam, że nie tu jest problem. Dodano po 4 Smashing: Jak wrzucam Twój program do Eclipsa to się nawet nie kompiluje...
Witam ponownie, Wracam tutaj z potrzebą skonsultowania pewnego problemu. Mianowicie po uruchomieniu USB postanowiłem dokładać kolejne bloki urządzenia i tak też pojawiła się obsługa DMA, ADC wyzwalanego timerem 2. No niestety projekt po kompilacji i wgraniu w ogóle nie działa :/ - Na terminalu otrzymuje 20 bajtów o wartości zero. Po zakomentowaniu prawie,...
robisz w main: volatile int i=0; w stm32f4xx_it.h (czy jak tam się nazywa ten header z funkcjami przerwań): extern volatile int i; Zrobiłem jak kazałeś Struktura projektu została wygenerowana przez Atollic'a. To, że z błędu nic nie wynika to właśnie mój problem. Z tego co wyczytałem w różnego rodzaju kursach jeżeli chcemy mieć dostęp do zmiennej w...
Faktycznie. W pliku stm32f1xx_hal_msp.c mam już remap tych pinów. Poniżej zawartość pliku pliku stm32f1xx_hal_msp.c. [syntax=c]/** ****************************************... * File Name : stm32f1xx_hal_msp.c * Description : This file provides code for the MSP Initialization * and de-Initialization codes. ****************************************...
1. Biorę przykład projektu ARM (akurat ten dla STM32, bo posiadane przezemnie LPC2103 ma za mało pamięci flash na te okrutne funkcje printf()) z mojej strony - http://www.elektroda.pl/rtvforum/topic13... 2. Wrzucam do main() następujący kod: #include <stdio.h> #include <math.h> #include <errno.h> #include <sys/types.h>...
Witaj ! Jeśli pamiętasz to do czego odnosi się: extern uint16_t VirtAddVarTab[NumbOfVar]; Czy jeśli chciałbym zaposać 2000 (0x07d0) pół słów (16 bit) to musiałaby zostać utworzona tablica adresów o tym rozmiarze? Jak Ci mało, to można rozszerzyć funkcje tak, aby korzystały ze dwóch zestawów stron parami, trójkami itd. Coś dokładniej można prosić?...
Więc tak 1. Zmienne AX, AX, AZ miałem zdefiniowane jako int16_t. Zmieniłem je już na float;) Wydaje mi się, że przy wywoływaniu funkcji i tak było to z automatu zamieniane na float i normalizacja działała prawidłowo. Nie miałem błędu kompilatora, a przy wywoływaniu funkcji MahonyAHRSupdateIMU, wszystko działało prawidłowo. Gx,Gy,Gz mam zdefiniowane...
Co do umieszczania kodu w odpowiednich przestrzeniach to trzeba zmodyfikować skrypt linkera oraz użyć atrybutów do danych i kodu aby kompilator odpowiednio stworzył obiekty. Ale to nie jest wystarczające. Trzeba dopisać trochę kodu w startupie jeżeli mają być zainicjalizowane (zerowanie też uznamy dla uproszczenia za inicjalizację aby nie tworzyć dodatkowych...
Od jakiegoś czasu nie importuję gotowych rozwiązań bibliotek C, tworząc własne - o dużej gęstości informacji, co przypadkiem przekłada się na wydajność i wyliczony koszt zużytej energii/funkcję. Wymaga to dużego nakładu pracy - to prawda. Przepisywanie rejestrów nie jest czasochłonne, po jakimś czasie zdefiniowanie jakiegoś procesora zajmuje pojedyncze...
Nadal nie widzę fragmentu w którym zmiennej buf_xARRx przypisujesz jakąś wartość, są za to zmienne których znaczenia nie sposób się domyślić (j, n, pozycja, stan...). Po co extern przy f_zmiany (potrzebny? niepotrzebny?). Zamiast wpisywać zero do ARR wyłącz licznik. Jak masz debugger to z niego skorzystaj albo wstaw taki fragment kodu który do analizy...
Postanowilem podzielic sie z wami moimi doswiadczeniami wykorzystania interfejsu USB we wlasnych projektach. Jak wiadomo interfejs USB jest juz powszechnie dolaczanym interfejsem do mikrokontrolerow wiekszosci producentow na rynku. Sama obsluga USB zarowno po stronie mikrokontrolera jak i pc (a wlasciwie Windows) jest mniej przyjazna niz w wiekszosci...
Witam od 2 dni próbuje zsynchronizować TMI1 (podczas generowania przebiegu PWM) i ADC2 w taki sposób aby przetwornik ADC2 próbkował w czasie gdy gdy nastąpi przepełnienie w liczniku jak poniżej na rysunku: https://obrazki.elektroda.pl/6382692400_... Dodam, że Timer pracuje w trybie "Center-aligned mode 2" a przetwornik ADC2 używa kanału...
Powiem tak jedyny problem jaki mam (pewnie dla Ciebie jest blachy) to żeby używać np include stm32f429xx.h lub core_cm4.h to dodałem je jeszcze raz (skopiowałem z CMSIS do folderu gdzie ich używam ). To mi się tylko nie podoba bo mam teraz dwa razy te same hadery w projekcie, a nie wiem gdzie dodać patch a jak piszę w pliku bezpośrednio ścieżkę to...
PS Przy okazji podejrzyj sobie implementacje _sbrk bo tam było sprawdzenie: if (heap_end + incr > stack_ptr) co w przypadku akurat uC i Twojego przypadku zawsze spowoduje brak jakiejkolwiek alokacji pameci bo uzna że jej po prostu nie ma.. implementacja zakłada że stos i heap rosną "do siebie" a do tego heap ma mniejsze adresy. W uC jest to bardzo...
O jedno pytasz, odrugim piszesz. extern nie jest konieczne przy funkcjach. Jezeli chodzi o drugą część pytania nie rozumiem o co Ci chodzi - myślę że więcej poczytaj o kompilacji linkowaniu, po co są te pliki .h itd itd, bo całkowicie tego nie rozumiesz. Jak masz wszystko w jednym pliku to ja nie wiem o co pytasz. To przecież nie zmienia dalej faktu,...
I jeszcze jedno pytanie, w Eclipsie trzeba pisać plugin aby jednym kliknięciem móc przy pomocy OpenOCD programować mikrokontroler? Nie trzeba. Wystarczy odpowiednio uruchomić sobie OpenOCD (External tools configuration) podając odpowiednie parametry. Przykład (dla LPC1758/59/68/69) : [syntax=bash]openocd -fc:\Programs\ARM\OpenOCD\bin\lpc1768.cf... -c...
Witam, zaczynam dopiero przygodę z Cortexami i utknąłem na konfiguracji kontrolera NVIC. Chciałem uzyskać reakcje procesora na przerwanie od GPIOC Pin0. Wydaje mi się, że wszystko jest OK, a jednak nie chcę działać, program po wystąpieniu przerwania nie wchodzi w funkcję jego obsługi. Poniżej zamieszczam kod: Funkcja konfigurująca NVIC, GPIOC, EXTI,...
Dziękuję za szybką odpowiedź :). Czyli Freddie Chopin napisał że się mylę a to dokładnie tyle samo znaczą te linie w przypadku dokładnie tego procka na który ja piszę. Przez to że nie dałem mu do tego powodu rozumiem, że nie powinien zgłaszać przerwania ponieważ zmieżone wartości napięć nigdy nie przekroczyły ustawionych wartości progowych na 5 V i...
Wstęp Poradniki pomagające w tworzeniu oprogramowania na mikrokontrolery skupiają się głównie na wykorzystaniu peryferiów samego mikrokontrolera, co jest zrozumiałe, ale niestety rzadko skncentrują się na części programu, która wykonuje się przed funkcją main. Poniższy poradnik ma na celu przybliżenie tej części programu na podstawie GNU ARM toolchain...
Ja zmiennych globalnych staram się nie używać. Mój pierwszy projekt to mnóstwo externów. Jak zacząłem się w tym gubić to stwierdziłem, że to chyba nie tędy droga. Teraz każda para plików c i h odpowiada za konkretną rzecz. Ewentualnie includuje inne i odpowiada za większą konkretną rzecz. Każdy mój plik ma dwie zmienne typu static. Pierwsza to numer...
Witam, mam problem z obsługą popularnego wyświetlacza ze sterownikiem HD44780. Nie działa on zgodnie z moimi oczekiwaniami, po wyłączeniu i włączeniu zasilania albo nic nie wyświetla albo wyświetla zadany tekst gubiąc przy okazji litery, tutaj podam przykład: do wyświetlenia napis "Test", na wyświetlaczu: "Tst" lub "TWt". Wydaje mi się że problemem...
Linkera to nie obchodzi czy ta pamięć działa czy nie działa. Jeśli umieścisz w niej jakieś zmienne, to przed ich inicjalizacją trzeba tą pamięć skonfigurować. Jeśli inicjalizacja jest robiona w startupie, to przed tą inicjalizacją, w moim startupie, jest wywoływana magiczna funkcja low_level_init_0() oraz low_level_init_1() - trzeba sobie taką funkcję...
Mam dziwny problem ze wskaźnikiem na funkcję. W kodzie jak poniżej pole initDriver nie jest inicjowane adresem funkcji (0x0800ecd0), tylko jakby popsutym (0x8800ecd1). Wygląda jakby coś niepotrzebnie ustawiało dwa bity w adresie, najmłodszy i najstarszy. Jakie może być wytłumaczenie? [syntax=c] drv = (struct at_ble_drv_t*) ble_memalloc(sizeof(struct...
Wygenerowany jest bezpośrednio z CooCoxa Linkera tutaj nie ma chyba jest zaszyty w środowisku. Wersja CoIDE to: Version: 1.7.8 [syntax=c] /** ****************************************... * (at)file startup_coide.c * (at)author Coocox * (at)version V1.0 * (at)date 20/07/2010 * (at)brief M0 M3 Devices Startup code. *...
Witam wszystkich użytkowników, na studiach spodobały mi się stmy, chce iść w tym kierunku... Mam problem z poprawną konfiguracją środowiska. Oto kroki które poczyniłem: 1.Instalacja gdb_hardvare_debuging w programie eclipse 1.1Help 1.2Instal New Software 1.3Work with: --All Avaliable Sites – 1.3.1Instalacja GDB hadvare debugging 2.Załadowanie...
Aktualnie najważniejsze pliki programu wyglądają następująco: main.c: [syntax=c]#include "main.h" //definicje stalych #define LINENUM 0x15 #define FONTSIZE Font12x12 #define LED1 GPIO_Pin_13 #define LED2 GPIO_Pin_14 #define PRZYCISK GPIO_Pin_0 //zmienne - definicje void Delay(__IO uint32_t time); extern __IO uint32_t TimmingDelay; unsigned short regVal;...
Może zacznę od opisu konfiguracji. Mam czujnik TSOP1736 podłączony do zasilania 5V, zaś jego wyjście do wejścia P0.16 mikrokontrolera LPC2148. Pozostałe połączenia (zasilanie, JTAG itp.) są OK, gdyż jest to zestaw ewaluacyjny Propoxu - EVBlpc213x\4x. Napisałem sobie bibliotekę do odbioru kodu RC5. Posiłkowałem się tą #include "lpc214x.h" #include...
No dobra. Nie jest źle :-) Po dłuższym procesie kombinowania oraz użerania się z nie do końca chcącym mnie słuchać µVisionem udało mi się spłodzić prawie działający kod. [syntax=c] #include "stm32f10x.h" //sprzet //diody LED #define LED_PORT GPIOB #define LED_PORT1 GPIOC #define LED_PORT_CLK RCC_APB2Periph_GPIOB #define LED_PORT1_CLK RCC_APB2Periph_GPIOC...
Zgadza się. Dlatego każdy plik .h w moim projekcie został podzielony na dwie części. Jedna która dołącza się jeżeli pewien ciąg został zdefiniowany, a druga jeżeli nie. W pliku c dołączam bez definicji i wtedy mam wszystkie zmienne globalne i prototypy funkcji. Jeżeli będą mi one potrzebne w innym pliku c do przed include robię define i wtedy mam tylko...
Hej, mam taki ciężki do przejścia dla mnie problem. Piszę program w którym wykorzystuję przerwanie od timera i nie mogę sobie poradzić z deklaracją zmiennych. Mam dwa pliki main.c i stm32f10x_it.c. W pliku main deklaruję zmienne globalne: #include "stm32f10x.h" #include "fatfs/src/ff.h" #include "fatfs/src/diskio.h" #include...
Witam, Od pewnego czasu przestawiłem się z AVR na STM32, zbudowałem sobie proste ramię robota na 5 serv + sterownik Maestro od pololu, wszystko ładnie śmiga. Tydzień temu kupiłem sobie takie Gamepad: http://botland.com.pl/joystick/2560-game... . Chciałem za pomocą tego pada sterować ramieniem. I już na 1 kroku...
stm32 zmienne stm32 zmienne pamięci progmem extern
marshall footswitch ustawienia modemu huawei e3131 makita ga5030 szlifierka
wiertarko wkrętarka wiertarko wkrętarka
Xbox One – ekran Power Center po przytrzymaniu logo na kontrolerze Satel Integra – kasowanie komunikatu "był sabotaż wezwij serwis" w centrali alarmowej