Jump to content

    
Realking

STM32H7, SDRAM и кэш

Recommended Posts

2 минуты назад, Realking сказал:

Тогда не понятно, почему с выравненными данными все гуд

Потому что проблема с невыравненным доступом по внешней шине.

Мануал на контроллер SDRAM своего МК открывали? Читали?

Share this post


Link to post
Share on other sites
Just now, jcxz said:

Потому что проблема с невыравненным доступом по внешней шине.

на сколько я понял кэш это и должен рулить

при том что память 8-ми битная

Share this post


Link to post
Share on other sites
32 minutes ago, __inline__ said:

Тем более данный форум -  ничем не обязывает.

Это профессиональный форум для общения. Вы вводите в заблуждение своих коллег. Хорошо это или плохо - вопрос совести, в первую очередь. Подумайте, будет вам приятно читать тему, в которой вы ищете для себя ответ на некий трудны вопрос. А в этой теме кто-то стебётся, хотя и знает правильный ответ. Или просто даёт левые советы.

Share this post


Link to post
Share on other sites
1 hour ago, haker_fox said:

Вы вводите в заблуждение своих коллег.

 

В каком месте?

 

1 hour ago, haker_fox said:

А в этой теме кто-то стебётся, хотя и знает правильный ответ. Или просто даёт левые советы.

 

Кто этот кто-то и какие левые советы он дал в этой теме?

 

1 hour ago, haker_fox said:

Это профессиональный форум для общения. Вы вводите в заблуждение своих коллег.

 

В каком месте и кого именно я ввёл в заблуждение?

Каких коллег вы имеете в виду? Перечислите.

 

Share this post


Link to post
Share on other sites

Я как-то на Cortex-M4 поймал HardFault по невыровненному доступу :)

template<uint32_t fifo_num>
static inline void WriteFIFO(uint8_t *src, uint16_t len)
{
  for (uint32_t words2write = (len+3)/4; words2write--; src += 4)
    #if defined(__ARMCC_VERSION)
      // ARMCC v6 на высокой оптимизации на *(uint32_t *)src ставит инструкцию LDM R1!,{R4}
      // которая на невыровненных данных валит в HardFault          
      *otg_dfifo<fifo_num>() = *src + (*(src+1)<<8) + (*(src+2)<<16) + (*(src+3)<<24);
    #else			 
      *otg_dfifo<fifo_num>() = *(uint32_t *)src;
    #endif
}

 

Share this post


Link to post
Share on other sites
14 minutes ago, VladislavS said:

Я как-то на Cortex-M4 поймал HardFault по невыровненному доступу :)


template<uint32_t fifo_num>
static inline void WriteFIFO(uint8_t *src, uint16_t len)
{
  for (uint32_t words2write = (len+3)/4; words2write--; src += 4)
    #if defined(__ARMCC_VERSION)
      // ARMCC v6 на высокой оптимизации на *(uint32_t *)src ставит инструкцию LDM R1!,{R4}
      // которая на невыровненных данных валит в HardFault          
      *otg_dfifo<fifo_num>() = *src + (*(src+1)<<8) + (*(src+2)<<16) + (*(src+3)<<24);
    #else			 
      *otg_dfifo<fifo_num>() = *(uint32_t *)src;
    #endif
}

 

 

Вот я и говорю, что фолты по невыровненному доступу - почти добрая половина ошибок при работе с памятью.

А ещё меня дураком пытаются выставить такие как jcxz ! :lol2:

Просто завидуют:  ведь Allwinner уделал C6745 до слёз , а для jcxz этот DSP - это "священная корова" :laugh2: Вот и хейтит он мои посты теперь, прикапываясь по мелочам. 

hacker_fox тоже уже на подходе, почти...

Edited by __inline__

Share this post


Link to post
Share on other sites
22 minutes ago, __inline__ said:

Кто этот кто-то и какие левые советы он дал в этой теме?

Перечитайте, пожалуйста, внимательно ещё раз, что я написал. Я перечитал, думал, что ошибся. Нет, всё верно написано.

16 minutes ago, VladislavS said:

Я как-то на Cortex-M4 поймал HardFault по невыровненному доступу :)

LDM/STM/LDRD/STRD всегда вызовут исключение по невыровненному доступу. Остальные команды для работы с данными - нет.

19 minutes ago, VladislavS said:

ARMCC v6 на высокой оптимизации на *(uint32_t *)src

Так откуда компилятор знает, какой адрес у вас находится в указателе. Он же неизвестен на момент компиляции. Это не вина компилятора.

7 minutes ago, __inline__ said:

hacker_fox тоже уже на подходе, почти..

Пожалуйста, пишите мой ник правильно. Сразу скажу, не грамматически правильно, как вам кажется, а так как я его пишу. Это моё право. И вы не имеете права искажать его.

9 minutes ago, __inline__ said:

А ещё меня дураком пытаются выставить такие как jcxz !

Если не ставить идиотских смайликов в конце, то выставляете вы себя в таком свете сами. Хотя бы необоснованным наездом на менеджер динамической памяти в соседней ветке. Ну и в остальных темах по-помаленьку тоже. Но то, что вы публикуете здесь на форуме в своих темах - действительно очень интересно. И поэтому я с большим удовольствием читаю ваши труды. Я лишь попросил вас выше в своём посте не писать по-возможности необоснованных высказываний. Но я не модератор на этом форуме. И мне всё равно, по большому счёту, если вы продолжите.

Share this post


Link to post
Share on other sites
29 минут назад, VladislavS сказал:

Я как-то на Cortex-M4 поймал HardFault по невыровненному доступу :)


      // ARMCC v6 на высокой оптимизации на *(uint32_t *)src ставит инструкцию LDM R1!,{R4}
      // которая на невыровненных данных валит в HardFault          

 

Интересно - это глюк или это так задумано? За IAR такого не замечал ни на какой оптимизации...

Ну разве что иногда он при копировании больших структур может такие команды использовать. Но не для простых типов short/long.

Share this post


Link to post
Share on other sites

Прекратите оффтопик, в противном случае участники оффтопика получат предупреждения и тема будет закрыта.

Оффтопик удалён.

Share this post


Link to post
Share on other sites
1 час назад, VladislavS сказал:

Я как-то на Cortex-M4 поймал HardFault по невыровненному доступу :)

А почему не через указатель на упакованные данные? Что-то типа

void func(u8 *src)
{
  __packed u32 *p = src;
  ... // работаем с p
}

 

Share this post


Link to post
Share on other sites
26 минут назад, Arlleex сказал:

А почему не через указатель на упакованные данные? Что-то типа


void func(u8 *src)
{
  __packed u32 *p = src;
  ... // работаем с p
}

 

Тогда бы компилятор точно поставил LDR/STR. Потому что если бы - LDM на __packed, то это точно была бы ошибка компилятора. А так (LDM/STM) для непакованного - логически вполне допустимо.

Share this post


Link to post
Share on other sites
3 hours ago, haker_fox said:

Пожалуйста, пишите мой ник правильно. Сразу скажу, не грамматически правильно, как вам кажется, а так как я его пишу. Это моё право. И вы не имеете права искажать его.

Красиво сказали) 

Share this post


Link to post
Share on other sites
3 часа назад, haker_fox сказал:

Так откуда компилятор знает, какой адрес у вас находится в указателе. Он же неизвестен на момент компиляции.

Вот! Как раз в точку. Не знаешь - рассчитывай на худшее.

Share this post


Link to post
Share on other sites
47 minutes ago, VladislavS said:

Вот! Как раз в точку. Не знаешь - рассчитывай на худшее.

Уф, как мне кажется, уважаемый @Arlleex выше даже показал, что нужно сделать)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.