-
71. Data: 2023-05-18 21:49:41
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: heby <h...@p...onet.pl>
On 18/05/2023 21:29, Dawid Rutkowski wrote:
> I wiesz, że sprawdza zakresy tablic w runtime, a C nie?
I tu wchodzi C++, cały na biało.
https://en.cppreference.com/w/cpp/container/array
std::array.
Możesz miec lub nie, bounds checking. Kwestia wyboru [] albo "at". To
nie jest std::vector. To najzwyklejsza tablica C z opcjonalnymi bajerami.
-
72. Data: 2023-05-19 09:33:30
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: JDX <j...@o...pl>
On 18.05.2023 14:13, Dawid Rutkowski wrote:
[...]
> działający na "gołym" 386 - ale 32-bitowym), i pewnie na pic32 też - ale żeby były
> wyjątki obsługiwane, to coś tam jeszcze trzeba albo dokompilować - w stylu eCosa,
> czyli jednozadaniowego, wielowątkowego systemu operacyjnego - lub coś po prostu
> puszczać, w stylu Linuxa czy innego OSa.
> Więc co tam jeszcze masz?
> Czy wszystko, łącznie z obsługą wyjątków, jest w tych 75k linii kodu? Bo można i
tak,
> choć ciekawi, jak te wyjątki obsługujesz.
A co rozumiesz przez wyjątek/exception? Bo to ma różne znaczenia:
https://en.wikipedia.org/wiki/Exception_handling, zobacz też
https://en.wikipedia.org/wiki/Interrupt. W każdym razie do obsługi
wyjątków sprzętowych OS nie jest konieczny.
-
73. Data: 2023-05-19 09:45:14
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: JDX <j...@o...pl>
On 18.05.2023 21:12, Janusz wrote:
[...]
> wklepywało się te kilka komend w asemblerze. Owszem był jakiś kompilator
> asemblera obsługujący monitory ale to do czegoś wiekszego się nadawało a
Nigdy nie było żadnego kompilatora assemblera na jakąkolwiek platformę... :-)
-
74. Data: 2023-05-19 10:19:09
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: JDX <j...@o...pl>
On 18.05.2023 16:16, Dawid Rutkowski wrote:
[...]
> A z trzeciej strony pozwolenie na C++ to otwarcie nowej Puszki Pandora.
> Tu dopiero możesz się dowiedzieć, co to jest prawdziwy bug, a nie jakiś tam sizeof.
http://micro-os-plus.github.io/
https://github.com/stateos/StateOS (produkt polski)
https://github.com/DISTORTEC/distortos
https://github.com/flit/argon-rtos
Nakładki:
https://github.com/grygorek/FreeRTOS_cpp11
https://github.com/QuantumLeaps/qpcpp
-
75. Data: 2023-05-19 10:29:06
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: JDX <j...@o...pl>
On 18.05.2023 16:40, heby wrote:
[...]
> #define FOO_FLAG 1<<6
> #define BAR_FLAG 1<<3
> #define OUT_FLAG 1<<2
>
> i funkcję:
>
> void setFlags( int flags, int extra_flags );
>
> No i które flags przyjmują jakie define?
>
> To przykład z typowego systemu embedded.
Masz pomysł jak zceplusplusować typowe definicje SFR-ów znane z C, np:
/* Power Control */
#define PCON (*((volatile unsigned char *) 0xE01FC0C0))
#define PCONP (*((volatile unsigned long *) 0xE01FC0C4))
Tak, aby to było w ,,duchu C++". Może referencje?
volatile unsigned char &PCON = (*((volatile unsigned char *) 0xE01FC0C0));
volatile unsigned long &PCONP = (*((volatile unsigned long *) 0xE01FC0C4));
-
76. Data: 2023-05-19 10:30:28
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: heby <h...@p...onet.pl>
On 19/05/2023 10:29, JDX wrote:
> Masz pomysł jak zceplusplusować typowe definicje SFR-ów znane z C, np:
> /* Power Control */
> #define PCON (*((volatile unsigned char *) 0xE01FC0C0))
> #define PCONP (*((volatile unsigned long *) 0xE01FC0C4))
A co konkretnie chcesz osiągnąć?
-
77. Data: 2023-05-19 11:25:06
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: JDX <j...@o...pl>
On 19.05.2023 10:30, heby wrote:
> On 19/05/2023 10:29, JDX wrote:
>> Masz pomysł jak zceplusplusować typowe definicje SFR-ów znane z C, np:
>> /* Power Control */
>> #define PCON (*((volatile unsigned char *) 0xE01FC0C0))
>> #define PCONP (*((volatile unsigned long *) 0xE01FC0C4))
>
> A co konkretnie chcesz osiągnąć?
>
O enkapsulację, aby byle kto/co tak łatwo nie mógł mazać po tych
rejestrach. Czyli aby te rejestry były prywatnymi polami klasy, coś w stylu:
class PowerMgmt {
private:
volatile unsigned char &refPCON = (*((volatile unsigned char *)
0xE01FC0C0));
volatile unsigned long &refPCONP = (*((volatile unsigned long
*) 0xE01FC0C4));
};
-
78. Data: 2023-05-19 11:51:20
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: JDX <j...@o...pl>
On 18.05.2023 15:37, heby wrote:
[...]
> Nie. Mechniazmów C++ możesz używać dowolnych, w dowolnym momencie. Nikt
> nie porzuca C, nie ma takiej potrzeby. W C++ jest masa ułatwień, któe
> znakomicie przydadzą się w C bez potrzeby rezygnacji i dysonansu
> ideologicznego. std::size to jedno z setek, użytecznych w embedded,
> ułatwień, za darmo.
>
No nie, zupełnie nie za darmo. Trzeba poświęcić sporo czasu na
dokształcanie, aby efektywnie używać nowego języka. Aby np. dowiedzieć
się, że w ogóle istnieje coś takiego jak std::size(). Bo sama zamiana,
bez podstaw ,,teoretycznych", kompilatora C na kompilator C++ nie ma
większego sensu. Chodzi o to, aby używać C++, a nie ,,C z klasami".
-
79. Data: 2023-05-19 11:53:09
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: heby <h...@p...onet.pl>
On 19/05/2023 11:25, JDX wrote:
>>> Masz pomysł jak zceplusplusować typowe definicje SFR-ów znane z C, np:
>>> /* Power Control */
>>> #define PCON (*((volatile unsigned char *) 0xE01FC0C0))
>>> #define PCONP (*((volatile unsigned long *) 0xE01FC0C4))
>> A co konkretnie chcesz osiągnąć?
> O enkapsulację, aby byle kto/co tak łatwo nie mógł mazać po tych
> rejestrach. Czyli aby te rejestry były prywatnymi polami klasy, coś w
> stylu:
> class PowerMgmt {
> private:
> volatile unsigned char &refPCON = (*((volatile unsigned char *)
> 0xE01FC0C0));
> volatile unsigned long &refPCONP = (*((volatile unsigned long
> *) 0xE01FC0C4));
> };
private:
void setPCON( ... value );
Jeszcz lepiej:
public:
void allowSleep();
void wakeUp();
bool isSleeping() const;
private:
[...magic...]
-
80. Data: 2023-05-19 12:07:54
Temat: Re: Dziwny problem z kodem w C (gcc mips/pic32)
Od: JDX <j...@o...pl>
On 18.05.2023 18:29, heby wrote:
[...]
> jest kontekst i cel użycia. To jest pierwotna potrzeba. sizeof to tylko
> workaround sprzed 30 lat na brak size. Przyznaje, popularny do dzisiaj.
No Panie, ale jak za pomocą std::size() otrzymać rozmiar tablicy w
bajtach? :-)