Skif 0 11 июля, 2012 Опубликовано 11 июля, 2012 · Жалоба Такая проблема присваиваю в тмс указатель ptr=0x28000. И начинаю инкрементировть указатель и записывать в него данные/ for(i=0;i<0xffff;i++) { *ptr=i; ptr++; } Заранее спасибо за помощь. Все нормально пишется до адреса 0ч30000(60000). А потом все нет ничего. Такое ощущение что указатель слетает. Может кто встречался с такой проблемой, может есть какие то параметры компиляции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zemlemer 0 11 июля, 2012 Опубликовано 11 июля, 2012 · Жалоба Такая проблема присваиваю в тмс указатель ptr=0x28000. И начинаю инкрементировть указатель и записывать в него данные/ Какая модель памяти указана в опциях компилятора? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sauris 0 11 июля, 2012 Опубликовано 11 июля, 2012 (изменено) · Жалоба Физически у 5510 адресная арифметика 16 битная, а старшие разряды адреса храняться отдельно. Поэтому при переходе через границу 65536-словной страницы запись у вас продолжается с ее начала, то есть с адреса 0x20000. там свои данные ищите. А код в рамках "физики" работы ядра C55x работает адекватно, за старшими частями адресов надо следить отдельно, инкременитруя их отдельной операцией, а не адресной арифметикой. Или, как вариант, инкрементировать число в 32-битной переменной и каждый раз присваивать указателю - но это жестокие тормоза будут из-за постоянного stall-а в конвейере (адресная арифметика считается в адресной фазе, а сдесь будет присваивание в фазе исполнения, а на это время, пока инструкция идет от адресной фазы до исполнения, будет stall) так сказать "особенности национальной ... " и "читайте инструкцию" (на само ядро). Изменено 11 июля, 2012 пользователем SAURIS GmbH Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться