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

 
 
> Выполнение функции из RAM, STM32L151 Keil
MiklPolikov
сообщение Jul 16 2016, 00:40
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Пытаюсь выполнить функцию из RAM.
Попадаю в Hardfault.
Подскажите, что я делаю неправильно ?
STM32L151 Keil

Код
////////////////////////////
void function(void)
{
    
}

//////////////////////////
void Execute_Function_From_Ram(void)
{
     unsigned int func_ram_array[0x20];
    
    int i;
      unsigned char *p1;
      unsigned char *p2;
    void  (*p_function)(void)=&function;
    
    
      p_function(); ///вызов через указатель ОК

     //переписываем функцию в RAM
      p1=(unsigned char*)p_function;  
      p2=(unsigned char*)&func_ram_array[0];
      for(i=0;i<(0x20*4);i++)
      {
              p2[i]=p1[i];
        }
      
        //запускаем из RAM
        p_function=(void*)p2;
        p_function(); ///тут программа попадает в HardFault
    
}



--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
x893
сообщение Jul 16 2016, 08:41
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Посыпаю голову пеплом - __ramfunc это в IAR
В качестве компенсации прилагаю проект под Keil с тремя функциями из RAM.
Запускать можно под симулятором.

Прикрепленный файл  ramfunc.rar ( 14.23 килобайт ) Кол-во скачиваний: 85
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jul 16 2016, 15:45
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(x893 @ Jul 16 2016, 11:41) *
прилагаю проект под Keil с тремя функциями из RAM.
Запускать можно под симулятором.
Прикрепленный файл  ramfunc.rar ( 14.23 килобайт ) Кол-во скачиваний: 85


Неужели всё так просто ? Одна настройка в опциях файла, и всё ?! И не нужно вписывать какую-нибудь секцию в Scatter файл, например ?
А каким образом под отладкой убедится, что выполняется на самом деле из RAM ?
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MiklPolikov   Выполнение функции из RAM   Jul 16 2016, 00:40
- - aaarrr   Цитата(MiklPolikov @ Jul 16 2016, 03:40) ...   Jul 16 2016, 01:04
- - x893   У них есть пример как это делать. Ключевое слово _...   Jul 16 2016, 01:16
|- - MiklPolikov   ЦитатаНу, как минимум нулевой бит в адресе вызывае...   Jul 16 2016, 01:43
|- - aaarrr   Цитата(MiklPolikov @ Jul 16 2016, 18:45) ...   Jul 16 2016, 17:09
|- - scifi   Цитата(MiklPolikov @ Jul 16 2016, 18:45) ...   Jul 17 2016, 07:17
|- - jcxz   Цитата(scifi @ Jul 17 2016, 13:17) Горазд...   Jul 17 2016, 08:15
|- - MiklPolikov   Вот почему в примере x893 в map файле видно что ...   Jul 17 2016, 12:48
- - jcxz   Цитата(MiklPolikov @ Jul 16 2016, 06:40) ...   Jul 16 2016, 12:13
- - x893   Установить в Debug - Simulator и нажать Ctrl-F5 Мо...   Jul 16 2016, 21:00
- - aaarrr   Смотрите сгенерированный .scat   Jul 17 2016, 13:02
|- - MiklPolikov   Цитата(aaarrr @ Jul 17 2016, 16:02) Смотр...   Jul 17 2016, 13:33
- - aaarrr   Как можно видеть, "не шработала" галочка...   Jul 17 2016, 14:19
|- - MiklPolikov   Цитата(aaarrr @ Jul 17 2016, 17:19) Как м...   Jul 17 2016, 14:28
- - aaarrr   OMG! Не надо ставить галочки, не надо позволят...   Jul 17 2016, 15:30
|- - pitt   Цитата(aaarrr @ Jul 17 2016, 11:30) По во...   Jul 17 2016, 16:22
- - x893   suum cuique   Jul 17 2016, 18:12


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

 


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


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