Перейти к содержанию
    

On 12/6/2023 at 11:05 AM, jenya7 said:

когда передаю константную строку в качестве аргумента

ToLower("WRITE");

поменяйте клавиатуру где caps lock не заедает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, dimka76 сказал:

Почему ?
У кортекса мосты между ОЗУ и ПЗУ и все будет прекрасно работать.
Сам на кортексах посмотянно printf использую и все замечательно работает.

printf("bla-bla-bla\r\n");

Чем это отличается от того, что привел ТС ?

Хоть и опередили, но... Если посмотреть printf(), то у него все четко

extern _ARMABI int printf(const char * __restrict /*format*/, ...) __attribute__((__nonnull__(1)));

все внимание на const.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 06.12.2023 в 11:46, haker_fox сказал:

Только не на ARM))) HF или иное исключение шины гарантированно.

Похоже вы ARM только в картинках видели. Отлично работает запись во внутреннюю флэш, только не изменяется ничего 🙂
Если обращаться в несуществующее адресное пространство -> HF.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 минуты назад, _3m сказал:

Отлично работает запись во внутреннюю флэш

STM32F103, ну попробуйте записать по указателю во Flash u8 или u32.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 hours ago, _3m said:

Отлично работает запись во внутреннюю флэш, только не изменяется ничего 🙂

Вам не кажется, что написанное - противоречиво? С одной стороны я читаю "отлично работает запись", с другой стороны - "только не изменяется ничего". Если ничего не изменяется, то это уже не отлично. Это уже - провал.

 

10 hours ago, _3m said:

Похоже вы ARM только в картинках видели.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 08.12.2023 в 06:37, haker_fox сказал:

Вам не кажется, что написанное - противоречиво? С одной стороны я читаю "отлично работает запись", с другой стороны - "только не изменяется ничего". Если ничего не изменяется, то это уже не отлично. Это уже - провал.

Исключений не возникает, все выполняется - значит работает.
А ожидать изменений в ROM не очень разумно. Flash это же разновидность ROM только с электрическим стиранием.

STM32F405, CubeIDE:

flash_write.thumb.png.647dbe492e9427a422c55e27c476e105.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, _3m сказал:

Исключений не возникает, все выполняется - значит работает.

Повторюсь - проведите сей эксперимент для STM32F103.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 minutes ago, _3m said:

Исключений не возникает, все выполняется - значит работает.

Возможно, это отдано на откуп производителю микроконтроллера. У меня нет STM32F405. Но есть LPC4337. Ядро то же самое. Запись во флешь приводит к Hard Fault с ошибкой шины. И это логично, т.к. мы фактически записать данные не можем в эту область данные, минуя специальный контроллер. GD32F450 ведёт себя также, вылетает в исключение.

P.S. А Вы не смотрели в errata? Может быть для STM32F405 описанное поведение как раз ошибочным является? И задокументировано?

P.S.S. Заглянул сам в errata. Такое поведение не описано, но, судя по количеству задокументированного, микроконтроллер с ошибками. Возможно, что данное поведение просто не отражено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 минут назад, _3m сказал:

Исключений не возникает, все выполняется - значит работает.
А ожидать изменений в ROM не очень разумно. Flash это же разновидность ROM только с электрическим стиранием.

STM32F405, CubeIDE:

flash_write.thumb.png.647dbe492e9427a422c55e27c476e105.png

 

Эксперимент некорректен. Из него совсем не видно, что "Исключений не возникает". Так как в таком случае скорее всего должен возникнуть "Imprecise bus fault". Особенно на более-менее продвинутых МК с "write buffer".

Хотя - не на всяком МК. Некоторые МК могут вообще не генерить никакого fault-а.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/11/2023 at 11:40 AM, jcxz said:

Эксперимент некорректен. Из него совсем не видно, что "Исключений не возникает".

А как сделать, чтобы видно было ?
Видяшку снять ?

"У нас в клубе принято джентельменам верить на слово!" 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 12/11/2023 at 11:14 AM, _3m said:

Исключений не возникает, все выполняется - значит работает.

Провел такой же тест на STM32F407. В Hard Fault не улетел. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

57 минут назад, dimka76 сказал:

А как сделать, чтобы видно было ?
Видяшку снять ?

Вы понимаете что такое "Imprecise bus fault"?

40 минут назад, dimka76 сказал:

Провел такой же тест на STM32F407. В Hard Fault не улетел.

похоже что нет...  :sad:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

56 minutes ago, dimka76 said:

В Hard Fault не улетел. 

В обработчике Hard Fauld стоит bkpt #0, а программа, после "записи во FLASH" запущена на исполнение? Т.е. выполнена ни одна команда STR, а и несколько после неё?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

16 минут назад, haker_fox сказал:

В обработчике Hard Fauld стоит bkpt #0, а программа, после "записи во FLASH" запущена на исполнение? Т.е. выполнена ни одна команда STR, а и несколько после неё?

Куб автоматом генерит обработчики исключений  - заглушки:

/**
  * @brief This function handles Hard fault interrupt.
  */
void HardFault_Handler(void)
{
  /* USER CODE BEGIN HardFault_IRQn 0 */

  /* USER CODE END HardFault_IRQn 0 */
  while (1)
  {
    /* USER CODE BEGIN W1_HardFault_IRQn 0 */
    /* USER CODE END W1_HardFault_IRQn 0 */
  }
}

Оно зацикливается если возникает исключение. Но все весело работает 🙂

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, _3m said:

Оно зацикливается если возникает исключение. Но все весело работает 🙂

Адрес функции HardFault_Handler точно находится в используемой таблице векторов в соответствующем слоте? Это по map-файлу проверено?

Это очень странно, что HF не вызывается при "записи" во Flash. Хотелось бы докопаться до сути.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...