просто обычно в обучающих уроках/видео не упоминают такого. Там просто рассказано как передать или принять или еще какие ни будь простые операции. А вот как делать что то серьезное мало кто пишет..
вообщем у меня полное разочарование. я хотел создать два массива, один в оперативке, а второй в памяти програм но на границе 0x1FFFF, чтоб посмотреть что будет переписываться во второй массив во время перехода. и что я вижу. конструкция типа:
for (int x = 0; x < 399; x ++){ for (int y = 0; y < 19; y ++){ perehodreal[x][y] = pgm_read_dword_near(&(array2d[x][y])); } }
работает без проблем. а вот если мы используем дальний адрес то вываливается ошибка и ничего не компилируется.
for (int x = 0; x < 399; x ++){ for (int y = 0; y < 19; y ++){ perehodreal[x][y] = pgm_read_dword_far(pgm_get_far_address(perehod[x][y])); } }
единственный вариант что я вижу это втупую прибавлять к адрессу 4 и считывать это значение в свой массив. но как мне кажется это максимально тупо
перечитав коммент понял что ошибся: prog flash имеет адреса 0x000000 - 0x3FFFF
и еще вы не упомянули такой фактор как переход к нулевому адресу без инкрементирования смещения. допустим если было 0x1FFFF и мы добавили один то станет 0x10000. не знаю еще как это прогнать в железе чтоб проверить. но в коментариях на многих англоязычных сайтах пишут что так и есть
вы уж извините, но что то я не могу понять кто тупит. у авр ведь разделенное адресное пространство. а то что вы пишете что-то не соответствует реальности:
"под код (ПЗУ, flash) отводятся адреса с 0 по 0x007fffff, а под данные (ОЗУ, SRAM) — с 0x00800100 по 0x0080ffff. "
я в отладке смотрю адресацию на атмега2560 и вижу там следующее.
data registers имеет адреса 0x0000 - 0x21FF
prog flash имеет адреса 0x000000 - 0x7FFF
я потратил вечер на то чтоб понять что к чему..
и у меня в атмел студио без проблем работает следующая конструкция:
откройте даташит на контролер, к примеру атмега328, там 400 страниц текста, и все они важны. так что думаю как бы там не структуризировать информацию, не поможет
Немного не понял про обманку. Как она будет работать если все равно не совпадает Id чипа который был и чипа обманки...
скорее нет)
спасибо, учту.
интересно какие решения используют в промышленных устройствах? Или это уже сугубо коммерческие решения?
понял. спасибо
просто обычно в обучающих уроках/видео не упоминают такого. Там просто рассказано как передать или принять или еще какие ни будь простые операции. А вот как делать что то серьезное мало кто пишет..
так тут точно так же)
хорошо, спасибо
шикарная идея, спасибо)
DMA просто привел как аналогию..
что именно вы имеете ввиду? можно вкратце?
Подскажите, а есть способ проверять связь через роутер?
сейчас тоже столкнулся с этой проблемой.
Подскажите где можно посмотреть весь список элементов доступных после android:
может сайт какой то, или еще что то
так что скажите? есть у вас идеи по этому поводу?
вообщем у меня полное разочарование. я хотел создать два массива, один в оперативке, а второй в памяти програм но на границе 0x1FFFF, чтоб посмотреть что будет переписываться во второй массив во время перехода. и что я вижу. конструкция типа:
for (int x = 0; x < 399; x ++){ for (int y = 0; y < 19; y ++){ perehodreal[x][y] = pgm_read_dword_near(&(array2d[x][y])); } }
работает без проблем. а вот если мы используем дальний адрес то вываливается ошибка и ничего не компилируется.
for (int x = 0; x < 399; x ++){ for (int y = 0; y < 19; y ++){ perehodreal[x][y] = pgm_read_dword_far(pgm_get_far_address(perehod[x][y])); } }
единственный вариант что я вижу это втупую прибавлять к адрессу 4 и считывать это значение в свой массив. но как мне кажется это максимально тупо
перечитав коммент понял что ошибся: prog flash имеет адреса 0x000000 - 0x3FFFF
и еще вы не упомянули такой фактор как переход к нулевому адресу без инкрементирования смещения. допустим если было 0x1FFFF и мы добавили один то станет 0x10000. не знаю еще как это прогнать в железе чтоб проверить. но в коментариях на многих англоязычных сайтах пишут что так и есть
вы уж извините, но что то я не могу понять кто тупит. у авр ведь разделенное адресное пространство. а то что вы пишете что-то не соответствует реальности:
"под код (ПЗУ, flash) отводятся адреса с 0 по 0x007fffff, а под данные (ОЗУ, SRAM) — с 0x00800100 по 0x0080ffff. "
я в отладке смотрю адресацию на атмега2560 и вижу там следующее.
data registers имеет адреса 0x0000 - 0x21FF
prog flash имеет адреса 0x000000 - 0x7FFF
я потратил вечер на то чтоб понять что к чему..
и у меня в атмел студио без проблем работает следующая конструкция:
pgm_read_dword_far( pgm_get_far_address(hz))
0 по 0x007fffff
подскажите о каком контролере идет речь? где такие большие адреса присутствуют?