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

 
 
> LPC1114., Исполнение программы из ОЗУ
_Артём_
сообщение Mar 19 2012, 18:48
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Вечер добрый.
Вопрос следующий:
Скачал с сайта Yagarto (пример для lpc1114).
Сделал в файле main.c нём такое изменение:
Код
#include <stdint.h>
#include "LPC11xx.h"
#include "core_cm0.h"

void DelayTick(uint32_t delay)
{
    while (delay) {
        while ((SysTick->CTRL&(1<<SysTick_CTRL_COUNTFLAG_Pos))==0);
        SysTick->CTRL = 0
            | (1 << SysTick_CTRL_ENABLE_Pos)    // Enable timer
            | (0 << SysTick_CTRL_TICKINT_Pos)   // Disable SysTick interrupts
            | (0 << SysTick_CTRL_CLKSOURCE_Pos); // System clock/2
        delay--;
    }
}

int main (void)
{
    LPC_GPIO0->DIR=1<<7;

    // setup SysTick timer
    SysTick->LOAD = 48000000 / 100-1;
    SysTick->VAL = 0;   // reset counter
    SysTick->CTRL = 0
        | (1 << SysTick_CTRL_ENABLE_Pos)    // Enable timer
        | (0 << SysTick_CTRL_TICKINT_Pos)   // Disable SysTick interrupts
        | (0 << SysTick_CTRL_CLKSOURCE_Pos) // System clock/2
;
    
    while (1) {
        LPC_GPIO0->DATA&=~(1<<7);
        DelayTick(100);
        LPC_GPIO0->DATA|=(1<<7);
        DelayTick(5);

    }
}


То есть всё выкинул и вставил моргание светодиодом с частотой ~1Гц. Запустил на отладку - увидел то что ожидал.
Дальше заменил в makefile строку
Код
RUN_FROM_FLASH = 1


Код
RUN_FROM_FLASH = 0


Ожидал увидеть, что программа начнёт исполнятся из ОЗУ - нет, не увидел: контроллер перешёл в какое-то неизвестное мне состояние и отлаживаться отказался(выдал сообщение: No source available for "").
Дальше, запрограммировал test_ram.elf - морганий не увидел.
Программатор/отладчик - LPCXpresso.

Как правильно запускать программу в ОЗУ? Можно ли отлаживать программу расположенную в ОЗУ?
Видимо, я хочу получить от этого примера то, для чего он совсем не предназначен. Для чего он тогда?

Спасибо.


Прикрепленные файлы
Прикрепленный файл  LPC1114Test.rar ( 129.12 килобайт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Артём_
сообщение Mar 21 2012, 22:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Попробывал использовать в проекте функции расположенные и в RAM и во flash:
Код
__attribute__ ((__section__(".data.WaitTimer0_16BInterrupt")))
void WaitTimer0_16BInterrupt()
{
    unsigned long counter_value=Timer0_16BCounter;

    while (counter_value==Timer0_16BCounter);
}


Судя по содержимому pc выполняется из ОЗУ.

Но выдаётся warning:
Цитата
Warning: setting incorrect section attributes for .data.WaitTimer0_16BInterrupt


Или есть какие-то другие способы, более прямые?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 22 2012, 06:39
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (_Артём_ @ Mar 22 2012, 00:15) *
Или есть какие-то другие способы, более прямые?
Секции .data не имеют атрибута x (executable). Надо завести свою секцию и разместить ее в выходную секцию .data:
CODE
    .data :
    {
        . = ALIGN(4);
        _sdata = .;                /* start of .data label */
        *(.ramfunc*)
        *(.data*)
        . = ALIGN(4);
        _edata = .;                /* end of .data label */
    } > RAM AT > TEXT
    _sidata = LOADADDR(.data);    /* start of initialized data label */


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 23 2012, 03:37
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(Сергей Борщ @ Mar 22 2012, 12:39) *
Код
    *(.data*)

Сергей, может, всё же вот так:
Код
        *(.data)
        *(.data.*)

? Иначе в секцию .data попадут секции с именами .datablablabla, а это может быть неправильно.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 23 2012, 15:35
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(AHTOXA @ Mar 23 2012, 05:37) *
Сергей, может, всё же вот так:
Код
        *(.data)
        *(.data.*)

? Иначе в секцию .data попадут секции с именами .datablablabla, а это может быть неправильно.


То есть в результате пишется так:
Код
.data :
    {
        . = ALIGN(4);
        _sdata = .;                /* start of .data label */
        *(.ramfunc)
        *(.ramfunc.*)
        *(.data)
        *(.data.*)
        . = ALIGN(4);
        _edata = .;                /* end of .data label */
    } > RAM AT > TEXT
    _sidata = LOADADDR(.data);    /* start of initialized data label */
.

Спасибо, AHTOXA.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Артём_   LPC1114.   Mar 19 2012, 18:48
- - Сергей Борщ   QUOTE (_Артём_ @ Mar 19 2012, 20:48) Даль...   Mar 20 2012, 07:51
|- - _Артём_   Спасибо, что-то начало запускаться (пока не понял ...   Mar 20 2012, 11:38
|- - Сергей Борщ   QUOTE (_Артём_ @ Mar 20 2012, 13:38) Это ...   Mar 20 2012, 16:54
- - _Артём_   Цитата(Сергей Борщ @ Mar 22 2012, 08:39) ...   Mar 22 2012, 19:08
- - Сергей Борщ   QUOTE (AHTOXA @ Mar 23 2012, 05:37) ? Ина...   Mar 23 2012, 07:42
- - AHTOXA   Кстати, заметил интересный глюк {arm-none-eabi,arm...   Mar 23 2012, 18:03
- - _Артём_   Цитата(AHTOXA @ Mar 23 2012, 20:03) Кстат...   Mar 23 2012, 18:11
|- - AHTOXA   Цитата(_Артём_ @ Mar 24 2012, 00:11) А ес...   Mar 23 2012, 18:49
|- - _Артём_   Цитата(AHTOXA @ Mar 23 2012, 20:49) Ну, т...   Mar 23 2012, 19:03
|- - AHTOXA   Цитата(_Артём_ @ Mar 24 2012, 01:03) Куда...   Mar 23 2012, 20:03
- - Сергей Борщ   QUOTE (AHTOXA @ Mar 23 2012, 20:03) Как т...   Mar 23 2012, 20:44
- - AHTOXA   Цитата(Сергей Борщ @ Mar 24 2012, 02:44) ...   Mar 24 2012, 11:37
- - _Артём_   Ещё странность: Код// файл ram_functions.h void Wa...   Mar 24 2012, 23:41


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

 


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


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