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

 
 
> Кэширование записи в 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
 
Start new topic
Ответов
aaarrr
сообщение Oct 20 2015, 11:52
Сообщение #2


Гуру
******

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



У ARM7TDMI нет ни кэша ни буфера записи.
Go to the top of the page
 
+Quote Post
murug
сообщение Oct 20 2015, 12:34
Сообщение #3


Участник
*

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



Цитата(aaarrr @ Oct 20 2015, 14:52) *
У ARM7TDMI нет ни кэша ни буфера записи.

Ну я это подозревал. Тогда придется изложить, что же я наблюдаю.

Код такой

В *.h-файле:
Код
__no_init volatile unsigned long ForceReprogrammingSignature @ 0x40008000;


В *.cpp-файле функция:
Код
void ForceReprogramming(bool Monopoly)
{
  ForceReprogrammingSignature = 0x085D0B75;
  
//  asm("nop"); // маленькая задержка в пять ассемблерных команд - если раскомментировать, не помогает (возвращается старое значение)
//  asm("nop");
//  asm("nop");
//  asm("nop");
//  asm("nop");
  
//  volatile unsigned long x = ForceReprogrammingSignature; // чтение (в ассемблере две команды) - если раскомментировать, помогает (сохраняется записанное значение)

//  vTaskDelay(10/portTICK_RATE_MS); // большая задержка в 10 мс - если раскомментировать, помогает (сохраняется записанное значение)

  if (Monopoly)
      __disable_interrupt(); // при Monopoly == true запрещаем прерывания

  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;

  if (Monopoly) // при Monopoly == true из функции не возвращаемся
      while (1);
}


Так вот, изначально в ForceReprogrammingSignature некое значение, назовем его "старым значением". Далее разные варианты:
1. Вызываем ForceReprogramming(false), она записывает в ForceReprogrammingSignature сигнатуру 0x085D0B75, назовем это "записанное значение", запускает WDT, возвращается, через 5 секунд программа перезапускается, видим в ForceReprogrammingSignature "записанное значение", все ок, вопросов нет.
2. Вызываем ForceReprogramming(true), она записывает в ForceReprogrammingSignature сигнатуру, без задержки запрещает прерывания (тем самым в частности останавливает планировщик FreeRTOS), запускает WDT, виснет в бесконечном цикле, через 5 секунд программа перезапускается, видим в ForceReprogrammingSignature "старое значение", офигеваем.
3. Вызываем ForceReprogramming(true) с раскомментированной задержкой на 10 мс, она записывает в ForceReprogrammingSignature сигнатуру, через 10 мс запрещает прерывания, запускает WDT, виснет в бесконечном цикле, через 5 секунд программа перезапускается, видим в ForceReprogrammingSignature "сохраненное значение".
4. Вызываем ForceReprogramming(true) с закомментированной задержкой на 10 мс, но с раскомментированным чтением, она записывает в ForceReprogrammingSignature сигнатуру, тут же считывает ее (две ассемблерные команды), запускает WDT, виснет в бесконечном цикле, через 5 секунд программа перезапускается, видим в ForceReprogrammingSignature "сохраненное значение".
5. Вызываем ForceReprogramming(true) с закомментированными задержкой на 10 мс и чтением, но с раскомментированной задержкой из пяти nop'ов, она записывает в ForceReprogrammingSignature сигнатуру, выполняет 5 пустых команд, запускает WDT, виснет в бесконечном цикле, через 5 секунд программа перезапускается, видим в ForceReprogrammingSignature "старое значение".

Вот и создается такое впечатление, как будто оператор
Код
ForceReprogrammingSignature = 0x085D0B75;
пишет физически в кэш, и если после этого сразу отключить прерывания, то значение из кэша не успевает сброситься в "настоящий" RAM, поэтому после перезагрузки по WDT снова читаем оттуда старое значение. Звучит бредово, поэтому ищу другую версию )

Сообщение отредактировал murug - Oct 20 2015, 12:56
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- murug   Кэширование записи в RAM в LPC2478?   Oct 20 2015, 11:26
||- - aaarrr   Цитата(murug @ Oct 20 2015, 15:34) Вот и ...   Oct 20 2015, 12:58
|||- - murug   Цитата(aaarrr @ Oct 20 2015, 15:58) А Вы ...   Oct 20 2015, 13:12
||- - jcxz   Цитата(murug @ Oct 20 2015, 18:34) 2. Выз...   Oct 21 2015, 04:36
||- - murug   Цитата(jcxz @ Oct 21 2015, 07:36) И что? ...   Oct 21 2015, 05:55
||- - zltigo   QUOTE (murug @ Oct 21 2015, 08:55) ...вид...   Oct 21 2015, 06:00
||- - murug   Цитата(zltigo @ Oct 21 2015, 09:00) То ес...   Oct 21 2015, 06:09
||- - zltigo   QUOTE (murug @ Oct 21 2015, 09:09) Не сов...   Oct 21 2015, 07:10
||- - murug   Цитата(zltigo @ Oct 21 2015, 10:10) Тем н...   Oct 21 2015, 07:35
||- - aaarrr   Цитата(murug @ Oct 21 2015, 10:35) Попроб...   Oct 21 2015, 07:44
||- - zltigo   QUOTE (murug @ Oct 21 2015, 10:35) Такие ...   Oct 21 2015, 08:11
||- - murug   Цитата(zltigo @ Oct 21 2015, 11:11) Да. Т...   Oct 21 2015, 08:48
||- - aaarrr   Цитата(murug @ Oct 21 2015, 11:48) А что ...   Oct 21 2015, 09:04
||- - zltigo   QUOTE (murug @ Oct 21 2015, 11:48) А така...   Oct 21 2015, 09:13
||- - aaarrr   Цитата(zltigo @ Oct 21 2015, 12:13) Вообщ...   Oct 21 2015, 09:24
|||- - zltigo   QUOTE (aaarrr @ Oct 21 2015, 12:24) Ну, ...   Oct 21 2015, 09:52
|||- - jcxz   Цитата(zltigo @ Oct 21 2015, 15:45) Вообщ...   Oct 21 2015, 09:55
|||- - zltigo   QUOTE (jcxz @ Oct 21 2015, 11:55) Давно у...   Nov 16 2015, 12:13
|||- - jcxz   Цитата(zltigo @ Nov 16 2015, 18:13) Очень...   Nov 16 2015, 13:30
|||- - zltigo   QUOTE (jcxz @ Nov 16 2015, 15:30) Ну или ...   Nov 16 2015, 14:13
|||- - zltigo   QUOTE (jcxz @ Nov 16 2015, 15:30) Так что...   Nov 16 2015, 17:08
|||- - jcxz   Цитата(zltigo @ Nov 16 2015, 23:08) Зашел...   Nov 17 2015, 04:56
|||- - zltigo   QUOTE (jcxz @ Nov 17 2015, 06:56) Ну что ...   Nov 17 2015, 07:55
||- - murug   Цитата(zltigo @ Oct 21 2015, 12:13) Вообщ...   Oct 21 2015, 10:10
|- - GetSmart   Цитата(aaarrr @ Oct 20 2015, 15:52) У ARM...   Nov 16 2015, 02:53
- - aaarrr   Можно все же увидеть листинг? Как-то уж очень чуде...   Oct 20 2015, 13:25
|- - murug   Цитата(aaarrr @ Oct 20 2015, 16:25) Можно...   Oct 20 2015, 14:30
- - aaarrr   Такое не работать просто не может, а в чудеса не о...   Oct 20 2015, 20:34
- - gerber   Классический механизм "posted write" (...   Oct 21 2015, 07:45
|- - murug   Цитата(gerber @ Oct 21 2015, 10:45) Класс...   Oct 21 2015, 08:03
|- - aaarrr   Цитата(murug @ Oct 21 2015, 11:03) Встает...   Oct 21 2015, 08:15
- - gerber   Помимо ядра процессора с памятью может работать и ...   Oct 21 2015, 10:26
|- - aaarrr   Цитата(gerber @ Oct 21 2015, 13:26) А не ...   Oct 21 2015, 10:35
- - zltigo   http://electronix.ru/forum/index.php?showt...=1312...   Oct 24 2015, 16:26
|- - murug   Цитата(zltigo @ Oct 24 2015, 19:26) http:...   Oct 27 2015, 12:22
- - zltigo   Дошли руки. Заплатку на NULL вектор вставил по вар...   Jan 6 2016, 09:51
- - ar__systems   EMCStaticConfig0 bit 19   Feb 2 2016, 23:12
- - zltigo   QUOTE (ar__systems @ Feb 3 2016, 01:12) E...   Feb 2 2016, 23:19
- - ar__systems   Цитата(zltigo @ Feb 2 2016, 18:19) К чему...   Feb 2 2016, 23:39


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

 


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


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