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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Keil + ассемблер, Новый пустой проект для ассемблера
LWW
сообщение Dec 10 2010, 00:28
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 177
Регистрация: 24-03-07
Пользователь №: 26 471



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

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

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

Готов поверить, что аппаратная начинка сама по себе очень надёжная. Железки делать научились, такой агрегат может проработать сотню лет, выполняя возложенные на него функции. Этого и боятся..
Go to the top of the page
 
+Quote Post
ЭнСб
сообщение Nov 15 2013, 16:27
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 5-11-13
Пользователь №: 79 055



Как в 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.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Nov 15 2013, 19:10
Сообщение #18


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
SII
сообщение Nov 16 2013, 07:56
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Вообще, для ARMов обычно используется скрипт компоновщика, в котором прописываются адреса всех секций (AREA) и т.п. вещи.
Go to the top of the page
 
+Quote Post
ЭнСб
сообщение Nov 16 2013, 17:16
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 5-11-13
Пользователь №: 79 055



Цитата(esaulenka @ Nov 15 2013, 22:10) *
Можно просто сместить AREA RESET

я не совсем корректно написал, смещать хочу не всю AREA, а задавать адрес меток
Цитата(esaulenka @ Nov 15 2013, 22:10) *
При необходимости можно сделать несколько AREA

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

Цитата(SII @ Nov 16 2013, 10:56) *
Вообще, для ARMов обычно используется скрипт компоновщика, в котором прописываются адреса всех секций (AREA) и т.п. вещи.

scatter-файл? примеры под конкретные ядра существуют?
Go to the top of the page
 
+Quote Post
SII
сообщение Nov 17 2013, 03:45
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 549
Регистрация: 13-07-10
Из: Солнечногорск-7
Пользователь №: 58 414



Цитата(ЭнСб @ Nov 16 2013, 21:16) *
можете подсказать, как для 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
    {
    }
}
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 17 2013, 07:44
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(ЭнСб @ Nov 16 2013, 21:16) *
можете подсказать, как для AREA задать адрес в коде программы без scatter-файла с которого секция начинается?

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

Цитата(ЭнСб @ Nov 16 2013, 21:16) *
scatter-файл? примеры под конкретные ядра существуют?

скачайте документацию на линкер
там все разжевано досконально
Go to the top of the page
 
+Quote Post
ЭнСб
сообщение Nov 20 2013, 11:24
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 52
Регистрация: 5-11-13
Пользователь №: 79 055



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

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

 


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


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