СВободная память ,стек

И попутно а каким образом можно узнать физический адрес в SRAM назначенной переменной…
Ну например:

byte My[300]
byte MyTemp[3][300]

узнать какой физический адрес My & MyTemp во время выполнения

Например, распечатать его через Serial.

Операция взятия адреса - &

1 лайк

От массива не нужно брать адрес - это уже адрес.

Ты уже сам решаешь где и что у тебя хранится.

Вы имеете ввиду так ?

byte MyEEP[700];
byte MyTemp[3][300];

void setup() {
 
Serial.begin(19200);  // put your setup code here, to run once:

int adrr;
adrr=&MyEEP;
Serial.println(adrr);
adrr=&MyTemp;
Serial.println(adrr);

for (int t=0;t<700;t++) MyEEP[t]=0xAA;
for (int t=0;t<300;t++) MyTemp[0][t]=0xDA;
for (int t=0;t<300;t++) MyTemp[1][t]=0xDB;
for (int t=0;t<300;t++) MyTemp[2][t]=0xDC;


}

void loop() {
  // put your main code here, to run repeatedly:

}

Я пробовал , но цифры неверные… Видимо не то чтото я сделал

1437
537
<0> counters watch
m1437
Memory dump: RAM
001437  8A FB 1F D5 EE F3 DF FF 6B 9F B6 E4 F3 75 F7 9E  ........k....u..
001447  86 2C 7A 3C FF CD B9 BD CF BD 62 79 FB D8 35 B9  .,z<......by..5.
001457  A7 1D F2 57 BD 9F 7E 5C FF F3 3C B6 B6 84 BE 9E  ...W..~\..<.....
001467  03 7F 69 D5 DE EC 53 37 E9 FF BB D2 AF DD E0 77  ..i...S7.......w
001477  37 FB 2B BF D7 F5 CD C4 CF F1 5A A3 E9 5D 96 A0  7.+.......Z..]..
001487  FE 95 6A 1F 97 7E 7F 5E 7D B2 7A BD 76 DE DA 8B  ..j..~.^}.z.v...
001497  3F D8 AF CD 63 D7 BD 72 EE E7 D5 AF 17 B4 F7 C6  ?...c..r........
0014A7  68 FF 9F 7B AA 7D 79 BE ED 1F 9E FF 8D 99 AE EB  h..{.}y.........
0014B7  7B 11 7E ED 18 3A 59 FE 59 6F 4C C6 2B 2F 70 BF  {.~..:Y.YoL.+/p.
0014C7  AF C5 CA 6D 89 68 FC 7E 3C 4F EF 77 2F FE 0E 6D  ...m.h.~<O.w/..m
0014D7  EF D9 FE A5 22 65 AB E9 16 D0 9F DE A3 65 9D D3  ...."e.......e..
0014E7  77 CD 67 FB BB DF E6 DE D7 FA 52 ED 74 D0 F2 DC  w.g.......R.t...
0014F7  E7 96 DB 55 9F 37 FF 6A 1F F8 D1 76 FE FF AC DF  ...U.7.j...v....
001507  EF 3A AD E7 CF FC C1 F9 8F D3 BB A7 FD EE FE F5  .:..............
001517  3B EE 9E 9F FC CF AF 03 7E 85 A9 9D F4 D5 F1 BE  ;.......~.......
001527  7B FF E1 80 FD DE 3F FE 7A F9 C6 3F BC F9 FF 72  {.....?.z..?...r

показало адресс массива 1437 и 537 но моими данными там не пахнет

Спасибо, буду знать.

1 лайк

Ничего, что Вы печатаете десятичное число, а потом его как шестнадцатеричное используете?

А так, да, Вы там много чего не так сделали, но это главное.

1 лайк

Да я так сейчас и делаю, но когда допустим тоже массив запонен не однообразными значениями а разными найти в дампе где он начинается порой сложновато

Точно .вот я тормоз . теперь да адрес сдампом совпадает . спасибо

Если не сложно тыкните , что не так , чтоб я знал свои ошибки ?

Наткнулся на Ваше высказывание …

… Если Вас интересует, как бы сделал я - я бы вообще не пользовался массивами, встроенными в язык, а определил бы класс с операциями доступа по индексу. На вид бы это выглядело бы неотличимо от двумерного массива…

Если не сложно просветите о чем речь ?

Да , но как показало практика проццесор из меня не очень и то что я думаю должно быть там не всегда на деле там… Вот для поиска косяков и пытался понять где физически адрес… :slightly_smiling_face:

byte MyEEP[700];
byte MyTemp[3][300];

void setup() {
  Serial.begin(115200);  // put your setup code here, to run once:
  Serial.println((uint16_t)MyEEP);
  Serial.println((uint16_t)MyTemp);
}

void loop() {}

Понял.спасибо