RAM speicherverbrauch von int16 arrays im ESP8266

OP #7238848
Lesenswert?

1
#define num_datasets 720
2
#define num_devices 6
3

4
struct wp
5
{
6
  int16_t power[num_devices];
7
  int8_t hour;
8
};
9

10
wp wp_arr[num_datasets];

Wieviel speicher braucht obige deklaration?
Bringt es etwas den array zu packen (pragma pack) ?

Wieviel ram stellt der esp8266 mit arduino für sowas bereit?
Moderator (Firma: Titel) Persönliche Seite #7239037
Lesenswert?

(prx) A. K. schrieb:
> Wenn der Prozessor keinen misaligned access kann
Kein halbwegs aktueller Prozessor kann ein 16 oder 32-Bit-Wort auf einer 
ungeraden Adresse ablegen. Der Tensilica-Core des ESP8266 kann es auch 
nicht. Wenn man misaligned Zugriffe macht, dann muss das der Compiler 
erledigen und die zusammengeklaubten Fragemnte mit dem Funnelshifter und 
dem SAR Befehl zurechtrücken. Das macht viel Aufwand und den Code 
langsam.
Angehängte Dateien:
#7239048
Lesenswert?

Lothar M. schrieb:
> Kein halbwegs aktueller Prozessor kann ein 16 oder 32-Bit-Wort auf einer
> ungeraden Adresse ablegen.

Bei normalen Load/Store-Befehlen wird das von ARMv7 unterstützt, d.h. 
z.B. von den Cortex-M ab M2, und wohl auch von entsprechenden 32-Bit 
Cortex-A und Cortex-R.

https://developer.arm.com/documentation/ddi0406/c/Application-Level-Architecture/Application-Level-Memory-Model/Alignment-support/Unaligned-data-access

PS: Ebenso bei ARMv8, also den 64-Bittern.

https://developer.arm.com/documentation/den0024/a/An-Introduction-to-the-ARMv8-Instruction-Sets/The-ARMv8-instruction-sets/Addressing
#7239070
Lesenswert?

Interessanterweise gilt sogar bei der RISC-V "base integer ISA":
"Support for misaligned memory access is mandatory."

Ich hätte es bei RISC-V allerdings ebensowenig erwartet wie du, zumal 
als Grundvoraussetzung. Es wird aber ausdrücklich aufgeführt, dass dies 
ein Motiv für vereinfachte Subsets sein kann, die das nicht können.

Sowohl bei obigen ARMen, als auch hier, gilt das freilich nur für 08/15 
Datenzugriffe, nicht für besondere Befehle, nicht für Code und auch 
nicht für den Stackpointer. Es kann per Control-Register verboten 
werden, und von den Eigenschaften des adressierten Speicherbereichs 
abhängig sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren