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

kirill_

Участник
  • Постов

    7
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Да вот в том-то и дело, что запрещается. С другой стороны, есть еще MPU. Но тут я прошу поддержки у знатоков: какие права выставить для региона памяти? Я поставил привелегированный RW, пользователь NO. В результате через JTAG код читается, а нужно, чтобы не читался.
  2. Код-то другой, но отличается лишь позиционированием некоторых локальных переменных. Я верю, что компилятор правильно делает свое дело. ;)
  3. Ошибка действительно была в коде. Смутило, что дебагер показывает не всегда верное значение переменной, если она лежит в регистре. Поэтому решение такое: Для отладки я выставляю локальным переменным функции volatile, что помещает их в оперативную память и теперь может быть верно прочитано дебагером. После отладки я удаляю volatile, и работоспособность функции не изменяется.
  4. Добрый день. У меня мк TI на Cortex-M3. Защита кода на нем осуществляется запретом определенных страниц флэш-памяти на чтение. Однако при компиляции IAR создает после каждой функции некие области "??DataTable....", в которых хранится инфа по глобальным переменным. После установки защиты выполнение кода стопарится на инструкции, которая обращается к таким DataTable. Я попытался вынести функции в отдельную секцию, чтобы отделить код от данных, но DataTable переносятся туда вслед за ними, и программа опять же стопарится. Есть еще MPU, но он тоже не приносит счастья, а валится в fault. В случае MPU я указываю права: привелегированному RW, пользователю запрет доступа. Подскажите, пожалуйста, как мне защиту кода выставить?
  5. Ну что ж, направление я увидел. Поищу утечки в памяти, и с ключевыми словами всё ясно. Спасибо за Ваши ответы. П.С. Модераторы, тему можно закрыть.
  6. Сергей, Игорь, спасибо за ответ. Зачем это нужно: порой, когда в моей функции много локальных переменных, и присутствуют вызовы других функций, компилятор забывает, что в регистре, скажем, Р0, у меня расположена переменная Х, и помещает туда другие данные. В результате при чтении переменной Х я получаю совсем не то значение, которое должен был. Квалификатор volatile справляется с задачей, неудобно только, что он вызывает при билде Warning: undefined behavior. Да и само решение показалось мне хитростью. В глубине души я понимал, что есть более официальное решение, поэтому пришел сюда за советом. Квалификатор static хорош, но он резервирует память за пределами кучи, поэтому вынужден от него отказаться.
  7. Господа, подскажите: как принудительно заставить IAR for ARM расположить локальную переменную функции в RAM-памяти, а не в регистре? Заранее спасибо.
×
×
  • Создать...