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

В качестве примера

 

В начале статьи описана конфигурация железа.

 

А дальше просто анекдот, что на этом железе сотворили несколько сотен или тысяч человек и те несколько миллиардов-триллионов-квадриллионов долларов, которые были вложены в разработку аппарата :01:

 

Готов поверить, что аппаратная начинка сама по себе очень надёжная. Железки делать научились, такой агрегат может проработать сотню лет, выполняя возложенные на него функции. Этого и боятся..

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


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

Как в keil для cortex m4 на ассемблере указать адрес flash памяти с которой начинают записываться (не исполняться) команды. До этого работал только с 8бит avr, там было ".org 0x0100"

Попробовал и здесь через ORG

STACK_TOP    EQU    0x20009FFF
    PRESERVE8
    THUMB
    AREA RESET, CODE, READONLY
    DCD STACK_TOP
    DCD Start

    ORG 0x08000200
    nop
    ENTRY
    nop

Start
    add    r10,    r10,    #0x00000FFF
    B    Start
    END

Выдал ошибку, что ORG не неизвестен (error: A1163E: Unknown opcode ORG , expecting opcode or Macro). Без строки "ORG 0x08000200" программа работает, но с адреса 0x0800000C.

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


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

Можно просто сместить AREA RESET:

- вариант простой: Options for Target -> Target, поправить адреса начала ROM

- вариант посложнее: снять галку "брать настройки линкера из настроек target", дописать руками scatter-файл (кейл делает заготовку, в несложных случаях можно понять, что там и как, даже без документации).

 

При необходимости можно сделать несколько AREA, но тогда уж точно простой способ не поможет.

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


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

Вообще, для ARMов обычно используется скрипт компоновщика, в котором прописываются адреса всех секций (AREA) и т.п. вещи.

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


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

Можно просто сместить AREA RESET

я не совсем корректно написал, смещать хочу не всю AREA, а задавать адрес меток

При необходимости можно сделать несколько AREA

можете подсказать, как для AREA задать адрес в коде программы без scatter-файла с которого секция начинается?

 

Вообще, для ARMов обычно используется скрипт компоновщика, в котором прописываются адреса всех секций (AREA) и т.п. вещи.

scatter-файл? примеры под конкретные ядра существуют?

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


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

можете подсказать, как для AREA задать адрес в коде программы без scatter-файла с которого секция начинается?

 

Кажется, это невозможно.

 

scatter-файл? примеры под конкретные ядра существуют?

 

Эти файлы всегда генерируются сами Кейлом, если настройку памяти осуществлять его средствами. Кроме того, они достаточно подробно описаны в документации. Зависят они не от ядер, а от моделей процессоров, поскольку распределение памяти к ядрам отношения не имеет. Вот у меня под NXP LPC1788:

 

CODE_IMAGE 0x00000000  ABSOLUTE NOCOMPRESS
{
    STARTUP  +0
    {
        *.o (RESET)
    }
    KINIT  +0  ALIGN 4
    {
        *.o (KINIT)
    }
    KERNEL  +0  ALIGN 4
    {
        *.o (KERNEL)
    }
    KDRIVERS  +0  ALIGN  4
    {
        *.o (KDRIVERS)
    }
    KERNEL_STRINGS  +0  ALIGN 4
    {
        *.o (KERNEL_STRINGS)
    }
}


DATA_IMAGE +0 ALIGN 8 NOCOMPRESS
{
    KDATA  0x10000000  ALIGN 8
    {
        Kernel_Data.o (KDATA)
    }
    KBLOCKS  +0  ALIGN 8
    {
        *.o (KBLOCKS)
    }
    SQA  +0  ALIGN 8
    {
        *.o (SQA)
    }
    KSTACK +0  ALIGN 8
    {
        *.o (KSTACK)
    }
}


COMMON_PARTITION 0x00010000  ALIGN 8 NOCOMPRESS
{
    TASK_CODE  0x00010000  ALIGN 4
    {
        *.o (.text)
        *.o (.rodata)
    }
}


TASK_PARTITION +0  ALIGN 8 NOCOMPRESS
{
    TASK_INI_DATA  0x10008000  ALIGN 8
    {
        *.o (.data)
    }
    TASK_NOINI_DATA  +0  ALIGN 8
    {
        *.o (.bss)
    }
    TASK_HEAP  +0 ALIGN 8 EMPTY 1024
    {
    }
}

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


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

можете подсказать, как для AREA задать адрес в коде программы без scatter-файла с которого секция начинается?

скаттер либо используется ваш, либо генерится и используется исходя из заданных в красивых окошках значений

 

scatter-файл? примеры под конкретные ядра существуют?

скачайте документацию на линкер

там все разжевано досконально

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


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

Спасибо за ответы, буду разбираться со скриптами. Для оставления пустого пространства с помощью команд в ассемблере нашел только SPACE и FILL, например " FILL 0x10, 0xBF00, 2" вроде заполняет пустыми командами (nop).

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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