Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   158 / 158
(#) jefflynn hozzászólása Jún 5, 2021 /
 
Sziasztok,
próbálom beüzemelni az Eclipse for Embedded C/C++ Developers-t, egyelőre csak szórakozásból. A fordítás működik, a debug nem. A hibaüzenet a következő:
  1. Starting target CPU...
  2. ...Target halted (DBGRQ, PC = 0xFFFFFFFE)
  3. Reading all registers
  4. Removing breakpoint @ address 0x000106BC, Size = 2
  5. WARNING: Failed to read memory @ address 0xFFFFFFFE
  6. WARNING: Failed to read memory @ address 0x20004FFC
  7. Reading 64 bytes @ address 0x20004FC0
  8. WARNING: Failed to read memory @ address 0x20004FC0
  9. WARNING: Failed to read memory @ address 0x20004FF8
  10. Reading 64 bytes @ address 0x20004FC0
  11. WARNING: Failed to read memory @ address 0x20004FC0
  12. WARNING: Failed to read memory @ address 0x20004FF8

Valami tipp, hogy mi lehet ez? Ami feltűnik, az PC = 0xFFFFFFFE de miért?
(#) vargham válasza jefflynn hozzászólására (») Jún 5, 2021 /
 
Milyen mikrokontroller, milyen debugger?
(#) jefflynn hozzászólása Jún 5, 2021 /
 
Nuvoton m0 és jlink.
(#) icserny válasza jefflynn hozzászólására (») Jún 5, 2021 / 1
 
Nuvoton M0 és M23-hoz van ingyenes Keil (akár kereskedelmi célra is). Bővebben: Link
(#) jefflynn válasza icserny hozzászólására (») Jún 5, 2021 /
 
Tudom, azt használom. Ez csak játék.
(#) jefflynn válasza jefflynn hozzászólására (») Jún 5, 2021 / 2
 
Megoldódott. Hibás volt a linker script, és a stack nem létező memóriacímre került.
(#) jefflynn hozzászólása Jún 7, 2021 /
 
Újabb kérdés: hogyan kell jlink-el felprogramozni egy a bootloader területet akkor, ha a jlink device adatbázisában csak a fő flash bank van megadva? Ekkor ugyanis, amikor a boot területet akarom programozni, azt a hibaüzenetet kapom hogy "ERROR: Selected Data (0x100000 - 0x100FFF) does not fit into selected flash sectors.". A Keil megoldja, de most nem azzal szeretném.
(#) capaizee hozzászólása Júl 11, 2021 /
 
Én szórakozásból C++17 -el (CLANG/LLVM 12) akarok "baremetal" STM32F103 -ra programot írni lehetőleg lehetőleg annyira hatékonyra mintha mintha CMSIS segítségével írnák programot.
Minimális #define használattal, névterekkel, zero overhead stb.
Saját header file már generáltam magamnak.

Van rajtam még valaki aki szórakozott ilyesmivel?
pár dologgal még küzdök pl.: nem akarja elfogadni std lib array-t
#include <array>
(#) cross51 válasza capaizee hozzászólására (») Júl 11, 2021 /
 
Mire gondolsz, hogy nem akarja elfogadni az array-t?
Maga az include problémás vagy a class-t nem ismeri fel?
using namespace std; vagy using std::array; feloldás megvan?
(#) capaizee válasza cross51 hozzászólására (») Júl 11, 2021 /
 
maga headert kifogásolja .h vagy anélkül is:

<source>:2:10: fatal error: 'array.h' file not found
<source>:2:10: fatal error: 'array' file not found

Ha csak ezt adom meg akkor fordul:
-Oz -mcpu=cortex-m3

de ha másikat akkor nem:
-Oz -Wall --target=thumbv7m-unknown-none-eabi -mthumb -march=armv7m -mcpu=cortex-m3 -mfloat-abi=soft -mfpu=none

Szóval töröm a fejem hogy a target miért okozza hogy többet nem találja meg a headert
A hozzászólás módosítva: Júl 11, 2021
(#) cross51 válasza capaizee hozzászólására (») Júl 11, 2021 /
 
Annyit lehet megpróbálni, hogy explicit megadod a std header-ök include dir-jét, de én ilyen problémával nem találkoztam.
(#) capaizee válasza cross51 hozzászólására (») Júl 11, 2021 /
 
megpróbáltam de nem nagyon sikerült más fájlt hiányol de akkor megpróbálok ellenni nélküle.
Pedig meg akartam próbálni hogy GPIO MODE / CNF ből valami tömböt csinálok és hátha a fordító eltünteti.
mint ebben a videóban: https://www.youtube.com/watch?v=zBkNBP00wJE

vagyis GPIOA.mode[10] = GPIOA.MODE_INPUT; is lehet használni
GPIOA.CRH_MODE10 = GPIOA.MODE_INPUT ; mellett
és kódméretbe ugyanannyi lenne mintha
GPIOA->CRH |= ( 0x0 << GPIO_CRH_MODE10_Pos );
írnák

PS lehet ha nem inputot csinálok akkor jobb példa lenne
(#) cross51 válasza capaizee hozzászólására (») Júl 12, 2021 /
 
A bitset kell neked bár az nem biztos, hogy null overhead, de minimális szerintem.
Valami ilyesmi elgondolás (L4-es GPIO_Typedef-ből csináltam)
  1. #include <bitset>
  2.  
  3. struct GPIO
  4. {
  5.         std::bitset<32> MODER;       /*!< GPIO port mode register,               Address offset: 0x00      */
  6.         std::bitset<32> OTYPER;      /*!< GPIO port output type register,        Address offset: 0x04      */
  7.         std::bitset<32> OSPEEDR;     /*!< GPIO port output speed register,       Address offset: 0x08      */
  8.         std::bitset<32> PUPDR;       /*!< GPIO port pull-up/pull-down register,  Address offset: 0x0C      */
  9.         std::bitset<32> IDR;         /*!< GPIO port input data register,         Address offset: 0x10      */
  10.         std::bitset<32> ODR;         /*!< GPIO port output data register,        Address offset: 0x14      */
  11.         std::bitset<32> BSRR;        /*!< GPIO port bit set/reset  register,     Address offset: 0x18      */
  12.         std::bitset<32> LCKR;        /*!< GPIO port configuration lock register, Address offset: 0x1C      */
  13.         std::bitset<32> AFR[2];      /*!< GPIO alternate function registers,     Address offset: 0x20-0x24 */
  14.         std::bitset<32> BRR;         /*!< GPIO Bit Reset register,               Address offset: 0x28      */
  15. };
  16.  
  17. #undef GPIOA
  18. #define GPIOA               ((GPIO *) GPIOA_BASE)
  19.  
  20. int main()
  21. {
  22.         GPIOA->MODER[10] = 1;
  23.         GPIOA->MODER |= 1 << 10;
  24.         int moder = GPIOA->MODER.to_ulong();
  25. }


Viszont az undef miatt C-s könyvtárral gond lehet vagy annyit lehet csinálni, hogy
  1. #if defined(__cplusplus)
  2.  
  3. #undef GPIOA
  4. #define GPIOA               ((GPIO *) GPIOA_BASE)
  5.  
  6. #endif

viszont így a C-s könyvtár ami az original GPIOx-re hivatkozik annak előbb kell legyen inlcude-olva mint a C++-os könyvtár.
(#) capaizee válasza cross51 hozzászólására (») Júl 13, 2021 /
 
Köszi.

Bitsettel ugyanaz a gondom mint a array-al nem találja meg még a fordító. Na meg rájöttem közben hogy bitfield-re amugy se tudok se tudok referenciát se mutatót definiálni.
max majd később rápróbálok osztály és operátor overload-val megoldani..

C-s könytárt meg teljesen kihagyom
generáltam namespace + constexpr + stuct használatával saját headert amibe benne van összes regiszter.

A led villogtató program 2 verzióban teljesen ugyanannyi bájtra (utasításra) vagyis pici szinten megvan 0 overhead, minden inline amit lehet const vagy constexpr van definiálva
(CMSIS vs Saját header)

most a konstansokat adom a header mivel mivel svd file nem tartalmazza amiből készült a saját header.
Pl.:
CNF:
-
name: IN_ANALOG
value: "0b00"
description: Analog mode
-
name: IN_FLOAT
value: "0b01"
description: Floating input (reset state)
-
name: IN_PULL
value: "0b10"
description: Input with pull-up / pull-down.
(#) kubichris válasza jefflynn hozzászólására (») Szept 14, 2021 /
 
Szia.
Nuvotonhoz (NUC 100, NUC 120) nekem Keil + Nulink vállt be. Próbálkoztam a CooCox CoLinkMe és az ARM ULink Pro-jával is, de nem vállt be a NUC családhoz.
Bootloadert csak a NuLink-kel tudtam flash-elni.
NuLink-et érdemes valamelyik Nutiny/NuMaker board-dal megvenni, mert annyiba kerül úgy, mint külön a NuLink.
Krisz
Következő: »»   158 / 158
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem