Golikov 0 February 6, 2015 Posted February 6, 2015 · Report post Я ниосом интересуюсь для общей эрудиции, мне позволительно без букваря:) Вот вы ща сказали и я вспомнил. В документике так и было про первое поколение и что теперь спец команды. Ага понятненько... тогда х66 надо еще и это учитывать, и понимать что так через кэш не пробьетесь в последних поколениях ниоса.... Quote Share this post Link to post Share on other sites More sharing options...
LAS9891 0 February 17, 2017 Posted February 17, 2017 · Report post int *addr_on_chip = (int *)0x4008000; записать туда *addr_on_chip = 10; считать оттуда int Temp = *addr_on_chip; при условии что 0x4008000 - это адрес в ДДР Написал такой код: int *RAM_addr = (int *)SDRAM_BASE; *RAM_addr = 0x01; RAM_addr++; *RAM_addr = 0x02; Сначала записал в ячейку памяти с адресом SDRAM_BASE число 1. Затем прибавил к значению указателя RAM_addr единицу и записал по новому адресу число 2. SDRAM_BASE - базовый адрес SDRAM равный 0x8000000. Потом посмотрел что находится в ячейках по адресам: RAM_addr = (int *)SDRAM_BASE и RAM_addr = ((int *)SDRAM_BASE+1). Значения оказались соответственно 1 и 2. Далее решил посмотреть значения указателя RAM_addr. Оказалось, что сначала RAM_addr = 0x8000000, а после команды RAM_addr++, значение указателя становится равным 0x800004. Почему так? Почему не 0x800001? Quote Share this post Link to post Share on other sites More sharing options...
1891ВМ12Я 0 February 17, 2017 Posted February 17, 2017 · Report post Далее решил посмотреть значения указателя RAM_addr. Оказалось, что сначала RAM_addr = 0x8000000, а после команды RAM_addr++, значение указателя становится равным 0x800004. Почему так? Почему не 0x800001? Потому что инкремент указателя на число увеличивает адрес на ширину этого числа. int 32 бита на этой платформе, вот на 4 байта и увеличило. Quote Share this post Link to post Share on other sites More sharing options...
LAS9891 0 February 17, 2017 Posted February 17, 2017 (edited) · Report post Потому что инкремент указателя на число увеличивает адрес на ширину этого числа. int 32 бита на этой платформе, вот на 4 байта и увеличило. точно, спасибо. Переписал так: alt_u32 nextaddrram = SDRAM_BASE; alt_u8 data = 0x00; alt_u8 RAM_count=1; for(RAM_count=1; RAM_count<9; RAM_count++) { *RAM_addr = RAM_count; RAM_addr=(alt_u32 *)nextaddrram; nextaddrram++; printf("Load RAM_addr=%x data=%x\n", (int)RAM_addr, (int)(*RAM_addr)); } В консоли вот что: Load RAM_addr=8000000 data=1 Load RAM_addr=8000001 data=2 Load RAM_addr=8000002 data=3 Load RAM_addr=8000003 data=4 Load RAM_addr=8000004 data=8406d14 Load RAM_addr=8000005 data=6 Load RAM_addr=8000006 data=7 Load RAM_addr=8000007 data=8 Что случилось с ячейкой 8000004? Edited February 17, 2017 by LAS9891 Quote Share this post Link to post Share on other sites More sharing options...
LAS9891 0 February 17, 2017 Posted February 17, 2017 · Report post Что за фигня творится: int main() { alt_u32 *RAM_addr = (alt_u32 *)SDRAM_BASE; alt_u32 nextaddrram = SDRAM_BASE; alt_u8 RAM_count=1; for(RAM_count=1; RAM_count<30; RAM_count++) { *RAM_addr = (alt_u32)RAM_count; RAM_addr=(alt_u32 *)nextaddrram; nextaddrram++; printf("Load RAM_addr=%x data=%d\n", (int)RAM_addr, (int)(*RAM_addr)); } Load RAM_addr=8000000 data=1 Load RAM_addr=8000001 data=2 Load RAM_addr=8000002 data=3 Load RAM_addr=8000003 data=4 Load RAM_addr=8000004 data=138439956 Load RAM_addr=8000005 data=6 Load RAM_addr=8000006 data=7 Load RAM_addr=8000007 data=8 Load RAM_addr=8000008 data=134244410 Load RAM_addr=8000009 data=10 Load RAM_addr=800000a data=11 Load RAM_addr=800000b data=12 Load RAM_addr=800000c data=0 Load RAM_addr=800000d data=14 Load RAM_addr=800000e data=15 Load RAM_addr=800000f data=16 Load RAM_addr=8000010 data=0 Load RAM_addr=8000011 data=18 Load RAM_addr=8000012 data=19 Load RAM_addr=8000013 data=20 Load RAM_addr=8000014 data=0 Load RAM_addr=8000015 data=22 Load RAM_addr=8000016 data=23 Load RAM_addr=8000017 data=24 Load RAM_addr=8000018 data=0 Load RAM_addr=8000019 data=26 Load RAM_addr=800001a data=27 Load RAM_addr=800001b data=28 Load RAM_addr=800001c data=0 Quote Share this post Link to post Share on other sites More sharing options...
1891ВМ12Я 0 February 17, 2017 Posted February 17, 2017 · Report post Что за фигня творится: Я бы обнулил всю память (записав нулевые байты), затем написал бы тест памяти, прежде чем играть с адресами :) Напоминает сбои памяти. Quote Share this post Link to post Share on other sites More sharing options...
LAS9891 0 February 17, 2017 Posted February 17, 2017 · Report post Я бы обнулил всю память (записав нулевые байты), затем написал бы тест памяти, прежде чем играть с адресами :) Напоминает сбои памяти. Пробовал сначала обнулить ячейки, а потом записывать. В косячных ячейках нули появлялись не после записи нулей, а только после записи данных. А про тест памяти не расскажите или где почитать/посмотреть пример? Quote Share this post Link to post Share on other sites More sharing options...