реклама на сайте
подробности

 
 
> Кэширование записи в RAM в LPC2478?
murug
сообщение Oct 20 2015, 11:26
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 23-12-10
Пользователь №: 61 816



Собственно при отладке программы наблюдаю спецэффекты, из которых напрашивается вывод о наличии этого самого кэширования. Оно действительно есть? Если да, то где про него почитать?
По ARM Architecture Reference Manual у меня создалось впечатление, что кэш присутствует у процессоров c MMU либо MPU, а разве LPC2478 к таким относится? В user manual'е на сам МК ни слова не нашел про это.

Сообщение отредактировал murug - Oct 20 2015, 11:30
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
gerber
сообщение Oct 21 2015, 07:45
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Классический механизм "posted write" ("отложенная запись"), всё правильно, процессор имеет право не исполнять физическую запись в устройство (в данном случае - это оперативная память) до следующей операции с ним, перед чтением вся очередь записей должна быть исполнена. Причём чтение может быть из любого другого адреса, а не обязательно того, куда производилась запись.
С кэшированием этот механиз имеет мало общего, так как в случае с кэшем отслеживается именно адрес доступа. Поэтому процессор может не иметь механизма кэширования, но запросто иметь отложенную запись.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
murug
сообщение Oct 21 2015, 08:03
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 23-12-10
Пользователь №: 61 816



Цитата(gerber @ Oct 21 2015, 10:45) *
Классический механизм "posted write" ("отложенная запись"), всё правильно, процессор имеет право не исполнять физическую запись в устройство (в данном случае - это оперативная память) до следующей операции с ним, перед чтением вся очередь записей должна быть исполнена.

Вот этому верю, чего-то подобного и ожидал.
Встает вопрос, однако, где можно найти так сказать официальную инфу о наличии такой штуки в ARM7TDMI?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 21 2015, 08:11
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (murug @ Oct 21 2015, 10:35) *
Такие рекомендации исходя из предположения, что значение в ячейке все-таки какой-то программной инициализацией меняется, правильно я Вас понимаю?

Да. Такие изменения делает какой-то конкретный кусок кода. Противное было-бы чисто чудом. Чудес в 21 веке не бывает. Я лично использую подобный подход - занесение массива данных и считывания его после перезапуска, достаточно широко. Например, в любом моем загрузчике используется область памяти для сохранения картины exception. Тоже пишется массив, записывается сигнатура наличия данных. При запуске основной программы распечатывается. Нималейших проблем, в том числе и на LPC2468.
А чем вызвано фиксированное и причем в очень странном месте - середине памяти месторасположение этой сигнатуры? Нет, это как бы не криминал, но странно. Официально нельзя располагать подобное только в прследних 32 байтах памяти, которые используются заводским загрузчиком.


QUOTE (murug @ Oct 21 2015, 11:03) *
Встает вопрос, однако, где можно найти так сказать официальную инфу о наличии такой штуки в ARM7TDMI?

Нет такой штуки у несчастного ARM7. Не говоря уже о том, что после этой записи контроллер по любому у Вас производит неоднократные записи при манипуляции с WD.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 21 2015, 08:15
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(murug @ Oct 21 2015, 11:03) *
Встает вопрос, однако, где можно найти так сказать официальную инфу о наличии такой штуки в ARM7TDMI?

В ядре ничего подобного нет.

Буфер записи мог бы быть у контроллера встроенной SRAM, но:
- Об этом нигде не говорится
- Нет смысла в его наличии
Go to the top of the page
 
+Quote Post
murug
сообщение Oct 21 2015, 08:48
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 23-12-10
Пользователь №: 61 816



Цитата(zltigo @ Oct 21 2015, 11:11) *
Да. Такие изменения делает какой-то конкретный кусок кода. Противное было-бы чисто чудом.

Я бы понял, если бы этот кусок какое-то фиксированное значение в ячейку заносил. Но он угадывает, что там было до последней записи... Что по-моему является еще бОльшим чудом )
Цитата(zltigo @ Oct 21 2015, 11:11) *
Я лично использую подобный подход - занесение массива данных и считывания его после перезапуска, достаточно широко.

А такая ситуация, что после последней записи и перед перезагрузкой нет обращений к on-chip static RAM, у Вас возникает?
Цитата(zltigo @ Oct 21 2015, 11:11) *
А чем вызвано фиксированное и причем в очень странном месте - середине памяти месторасположение этой сигнатуры? Нет, это как бы не криминал, но странно. Официально нельзя располагать подобное только в прследних 32 байтах памяти, которые используются заводским загрузчиком.

Это уже в процессе экспериментов туда переместил, изначально как раз перед упомянутыми 32 байтами было.
Цитата(zltigo @ Oct 21 2015, 11:11) *
Нет такой штуки у несчастного ARM7. Не говоря уже о том, что после этой записи контроллер по любому у Вас производит неоднократные записи при манипуляции с WD.

Эти записи в область AHB или APB peripherals, а не on-chip static RAM, видимо дело в этом.


Вообще вроде удалось найти инфу (несколько зыбкую), что даже и кэш имеется:

Вот здесь:
Цитата
Naming Conventions
...
ARMx2z (e.g. ARM720T) indicates cache, MMU & Process ID support


А что 2478 - это ARM720T - например вот здесь
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 21 2015, 09:04
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(murug @ Oct 21 2015, 11:48) *
А что 2478 - это ARM720T - например вот здесь

Нет, 2478 - это именно ARM7TDMI-S.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 21 2015, 09:13
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (murug @ Oct 21 2015, 11:48) *
А такая ситуация, что после последней записи и перед перезагрузкой нет обращений к on-chip static RAM, у Вас возникает?

Вообще-то сама "перезагрузка" это ВХОД В ЗАВОДСКОЙ загрузчик, где этих обращений явно хватает. Это раз. А то, что Ваши чудотворно действующие нопы это никак не обращение к памяти - это два.

QUOTE
А что 2478 - это ARM720T - например вот здесь

А это ничего, что ПРОИЗВОДИТЕЛЬ конроллера пишет о своем изделии в Product data sheet - ARM7TDMI-S processor, running at up to 72 MHz


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 21 2015, 09:24
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zltigo @ Oct 21 2015, 12:13) *
Вообще-то сама "перезагрузка" это ВХОД В ЗАВОДСКОЙ загрузчик, где этих обращений явно хватает.

Ну, "перезагрузка" - это еще и сброс, который мог бы очистить буфер записи при его наличии.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 21 2015, 09:52
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (aaarrr @ Oct 21 2015, 12:24) *
Ну, "перезагрузка" - это еще и сброс, который мог бы очистить буфер записи при его наличии.

При наличии - да. Но его нет, а есть напротив куча команд - ну тот-же вечный цикл продолжающийся 5 секунд и команды в нем выпоняющиеся как-бы ничем не хуже несеольких нопов, которые типа "помогают".

Вообще-то таинственные явления в NXP есть sad.gif - я не далее месяца тому назад в старом модернизируемом изделии на LPC2103 локализовал эффект, кода при работе SPI находящемся в режиме slave и тактирующимся софтовым мастером контроллер прерываний формировал нулевой вектор раз в несколько суток. Ничего из описанного в errata под этот эффект подогнать не удалось. Пришлось предпринимать близкие к шаманским действия sad.gif

QUOTE (murug @ Oct 20 2015, 15:34) *
PCLKSEL0_bit.PCLK_WDT = 1; // далее взводим WDT
WDTC = CCLK / 4 * 5; // на 5 секунд
WDMOD_bit.WDEN = 1;
WDMOD_bit.WDRESET = 1;
WDCLKSEL_bit.WDSEL = 1;
WDFEED = 0xAA;
WDFEED = 0x55;

А если к этому добавить:
CODE
  WDFEED = 0xAA;
  WDFEED = 0x5A;

то есть перезепуск без 5 секунд?
И еще, инициализация WD и в случае Monopoly=FALSE должна производиться при запрещенном прерывании, ибо любое вкоинивание прерывания это мгновенный перезапуск.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 21 2015, 09:55
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Oct 21 2015, 15:45) *
Вообще-то таинственные явления в NXP есть sad.gif - я не далее месяца тому назад в старом модернизируемом изделии на LPC2103 локализовал эффект, кода при работе SPI находящемся в режиме slave и тактирующимся софтовым мастером контроллер прерываний формировал нулевой вектор раз в несколько суток. Ничего из описанного в errata под этот эффект подогнать не удалось. Пришлось предпринимать боизкие к шаманским действия sad.gif

Давно уже работал с LPC2378, но вроде смутно помнится, что был подобный баг в контроллере прерываний. И он был описан в еррата. И даже в соотв. порту uCOS было указано.
Если это конечно он.
Заключался он в том, что при чтении адреса вектора прерывания из VIC, мог считаться ноль - это ложное прерывание.
Фрагмент моего ISR для IRQ где это проверяется:
Код
ISRirq:         SUB      LR, LR, #4
                STMFD    SP!, {R0-R3, R12, LR}
                MVN      R1, #255            ;VICAddress
                LDR      R0, [R1]
                CMP      R0, #0        ;проверка на ложное IRQ
                STRNE    R1, [R1]            ;acknowlege IRQ
                MOVNE    LR, PC
                BXNE     R0
                CMP      R0, #0
                LDMFDEQ  SP!, {R0-R3, R12, PC}^;выйти если нет сис. вызовов
                ...
Go to the top of the page
 
+Quote Post
murug
сообщение Oct 21 2015, 10:10
Сообщение #26


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 23-12-10
Пользователь №: 61 816



Цитата(zltigo @ Oct 21 2015, 12:13) *
Вообще-то сама "перезагрузка" это ВХОД В ЗАВОДСКОЙ загрузчик, где этих обращений явно хватает. Это раз. А то, что Ваши чудотворно действующие нопы это никак не обращение к памяти - это два.

Нет, я же написал, что нопы как раз не помогают.

Цитата(zltigo @ Oct 21 2015, 12:13) *
А это ничего, что ПРОИЗВОДИТЕЛЬ конроллера пишет о своем изделии в Product data sheet - ARM7TDMI-S processor, running at up to 72 MHz

Полагал, что 720T и TDMI-S - понятия из разных классификаций, собственно из той же пдф, на которую давал ссылку - там указано, что 720T это частный случай ARM7TDMI-S. Ну я сразу написал, что инфа зыбкая.


Цитата(zltigo @ Oct 21 2015, 12:52) *
И еще, инициализация WD и в случае Monopoly=FALSE должна производиться при запрещенном прерывании, ибо любое вкоинивание прерывания это мгновенный перезапуск.

О, действительно. Спасибо!
Go to the top of the page
 
+Quote Post
gerber
сообщение Oct 21 2015, 10:26
Сообщение #27


Знающий
****

Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088



Помимо ядра процессора с памятью может работать и периферия, посредством DMA, возможно, сразу несколько каналов. При отсутствии механизма "posted write" процессору после каждого запроса операции чтения/записи пришлось бы ожидать завершения транзакции, открытой каким-нибудь каналом DMA. С чтением ничего не поделаешь - придется ждать, т. к. продолжение программы без прочитанного значения бессмысленно. А запись на дальнейшее исполнение кода не влияет (до ближайшего чтения), поэтому глупо "стоять в очереди" и ждать, когда можно "записать и забыть".
А не описан в руководстве на процессор он, видимо, потому, что имеет отношение скорее к внутренней шине типа AHB, APB, чем к самому ядру. Также как, например, механизм posted write на шине PCI - это фича PCI, а не процессора.


--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 21 2015, 10:35
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(gerber @ Oct 21 2015, 13:26) *
А не описан в руководстве на процессор он, видимо, потому, что имеет отношение скорее к внутренней шине типа AHB, APB, чем к самому ядру.

Память, на которой наблюдаются эффект, подключена к локальной шине процессора. Периферия к ней как раз доступа не имеет. Так что смысла нет буферизировать запись.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 24 2015, 16:26
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244




http://electronix.ru/forum/index.php?showt...=131278&hl=


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
murug
сообщение Oct 27 2015, 12:22
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 23-12-10
Пользователь №: 61 816



Цитата(zltigo @ Oct 24 2015, 19:26) *

Мда... есть в документации на 21xx, но нет (либо еще не найдено) на 24xx.
Ну в любом случае вопрос можно считать закрытым.
Спасибо всем, кстати )
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 10:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.0149 секунд с 7
ELECTRONIX ©2004-2016