Goto page Previous 1, 2, 3 ... 5, 6, 7 ... 10, 11, 12 Next
heby
Guest
Fri May 19, 2023 10:30 am
On 19/05/2023 10:29, JDX wrote:
Quote:
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ąć?
JDX
Guest
Fri May 19, 2023 11:25 am
On 19.05.2023 10:30, heby wrote:
Quote:
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));
};
JDX
Guest
Fri May 19, 2023 11:51 am
heby
Guest
Fri May 19, 2023 11:53 am
On 19/05/2023 11:25, JDX wrote:
Quote:
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...]
JDX
Guest
Fri May 19, 2023 12:07 pm
On 18.05.2023 18:29, heby wrote:
[...]
Quote:
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?
heby
Guest
Fri May 19, 2023 12:12 pm
heby
Guest
Fri May 19, 2023 12:16 pm
On 19/05/2023 12:07, JDX wrote:
Quote:
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?
Do tego jest sizeof.
Dla rozmairu w *elementach* jest std::size()
W examplu z błedem programista chciał poznać rozmiar tablicy w
elementach, nie bajtach.
Użył workaroundu i jak to z workaroundami bywa, pomylił się.
Jeśli piszesz w C++ prawidłowo, ilość użyć sizeof jest znikoma i dotyczy
głównie kodu pracujacego na poziomie allokatorów czy sprzętu. Normalny,
algorytmiczny, kod prawie nigdy nie wymaga wiedzy o rozmiarach czegośtam
w bajtach.
JDX
Guest
Fri May 19, 2023 12:43 pm
On 19.05.2023 12:16, heby wrote:
Quote:
On 19/05/2023 12:07, JDX 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? :-)
Do tego jest sizeof.
Dla rozmairu w *elementach* jest std::size()
W examplu z błedem programista chciał poznać rozmiar tablicy w
elementach, nie bajtach.
Użył workaroundu i jak to z workaroundami bywa, pomylił się.
Jeśli piszesz w C++ prawidłowo, ilość użyć sizeof jest znikoma i dotyczy
głównie kodu pracujacego na poziomie allokatorów czy sprzętu. Normalny,
algorytmiczny, kod prawie nigdy nie wymaga wiedzy o rozmiarach czegośtam
w bajtach.
JDX
Guest
Fri May 19, 2023 12:45 pm
On 19.05.2023 12:16, heby wrote:
Quote:
On 19/05/2023 12:07, JDX 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? :-)
Do tego jest sizeof.
No, czyli, służą do czego innego, więc jedno nie jest workaroudem na
brak drugiego.
Grzegorz Niemirowski
Guest
Fri May 19, 2023 12:54 pm
JDX <jdx@onet.pl> napisał(a):
Quote:
No, czyli, służą do czego innego, więc jedno nie jest workaroudem na brak
drugiego.
Jest, bo na tym polega workaround, że używasz czegoś nieprzeznaczonego do
danego celu. sizeof() nie służy do zwracania liczby elementów ale czasem
może dać poprawny wynik (dla typu jednobajtowego). Przy typie wielobajtowym
trzeba podzielić przez sizeof(typ_wielobajtowy). Można też w ogóle nie
używać sizeof() ale mieć stałą definiującą rozmiar i używać jej zarówno do
deklaracji tablicy jak i do dostępu do tej tablicy. Szczególnie przydatne
jak ta tablica jest potem gdzieś przekazywana i ktoś przez roztargnienie
mógłby zrobić sizeof() na wskaźniku i dostać (zwykle) 4 lub 8 zależnie od
architektury zamiast rozmiaru tablicy.
--
Grzegorz Niemirowski
https://www.grzegorz.net/
JDX
Guest
Fri May 19, 2023 12:57 pm
J.F
Guest
Fri May 19, 2023 1:32 pm
On Thu, 18 May 2023 12:44:11 +0200, Janusz wrote:
Quote:
W dniu 18.05.2023 o 12:18, Marek pisze:
On Thu, 18 May 2023 08:55:51 +0200, Janusz <janusz_k@o2.pl> wrote:
Dla mnie trochę dziwny jest ten fragment, reason-nie wykorzystana
zmienna a komunikat (z tablicy) dwa razy wywołujesz ten sam, zmienna
status.
Kod na potrzeby posta trochę uprościłem. Znalazłem dziada:
unsigned short BT[300];
int i;
for (i=0; i<sizeof(BT);i++)
BT[i] = getval(i);
Analizując mapę linkera widać, że BT była umieszczona tuż przed tamtą
tablicą ze wskaźnikami do stringów.
No i co z tego, przecież to dwie osobne tablice i osobno się adresują i
chyba kompilator czy linkier nie ma tu błędu w adresacji?
Tablice moze i osobne, ale jak przekroczysz rozmiar BT, to trafi nie
wiadomo gdzie.
Quote:
Na starość to trzepać worki po cemencie a nie programować....
Eee tam, ja mam już prawie 63 i dalej piszę programy i naprawiam
elektronikę.
Ale potem takie krzaczki jak powyzej wychodzą :-)
J.
heby
Guest
Fri May 19, 2023 1:57 pm
On 19/05/2023 12:57, JDX wrote:
Quote:
Nie ma absolutnie wymogu używania C++ w sensie klas, new/delete,
templates. Nie musisz nawet wiedzieć, że to jest w C++. Używasz tego,
czego potrzebujesz, jak st::size albo RIIA. I nie ma problemu.
Jak nie ma wymogu, to po co zmieniać kompilator?
Aby dostać darmowe udogodnienia.
Z tych samych przyczyn jak legacy programmers lat temu 40 zmieniali
asembler na C.
Też dało sie wszystko w asm napisać. A jednak zmienili. Dziwne, nie?
Quote:
No i kwestia
zasadnicza. Wiem, że w C nie ma tego, czego potrzebuję. Aby dowiedzieć
się, czy w C++, a w zasadzie w STL , jest to, czego potrzebuję, to muszę
poświęcić czas.
Tak. Zmienić kompilator na g++. Zazwyczja to wszystko, czasami kilka
detali więcej jeśli piszesz coś wyjątkowo dziwacznego (np. wyłaczenie
wsparcia wyjątków itp).
Quote:
Nie twierdzę, że nie warto przejść z C na C++. Twierdzę,
że nie jest to ani za darmo ani przynajmniej jakoś specjalnie tanie.
Nic nie kosztuje, w większości wypadków. Jeśli przejście coś kosztuje,
to znaczy że masz jakiś niezły fuckup w C. Tak, są bardzo interesujące
projekty, które w C++ się nie kompilują, a właściciele będą bronić tego
guano jak niepodległości. Miałem do czynienia kilka razy. To stan umysłu.
Quote:
BTW. AFAIR w C, korzystając z rozszerzeń gcc, również można
wykorzystywać RIIA.
Nikt nie broni, tylko po co w C?
Janusz
Guest
Fri May 19, 2023 2:36 pm
heby
Guest
Fri May 19, 2023 2:38 pm
On 19/05/2023 14:36, Janusz wrote:
Quote:
nazwijmy to translator
Nazwijmy to asembler.
Goto page Previous 1, 2, 3 ... 5, 6, 7 ... 10, 11, 12 Next