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

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


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

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



Пожалуйста, помогите создать новый пустой проект на ассемблере для камешка STM32. В среде Keil.

Два дня потратил в поисках рабочего примера.. Вроде, пустой проект создаётся. Это я и сам смог сделать. Ну как обычно, в начале идёт таблица прерываний. Дальше код. Хорошо, это всё компилируется, разобрался. Но не могу подключить файлик stm32f10x.h вот в чём дело..

Пишу #include "stm32f10x.h" - ошибка ...

А без него-то никак!
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 29 2010, 18:59
Сообщение #2


Гуру
******

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



Цитата(LWW @ Nov 29 2010, 21:45) *
Пожалуйста, помогите создать новый пустой проект на ассемблере для камешка STM32. В среде Keil.

Два дня потратил в поисках рабочего примера.. Вроде, пустой проект создаётся. Это я и сам смог сделать. Ну как обычно, в начале идёт таблица прерываний. Дальше код. Хорошо, это всё компилируется, разобрался. Но не могу подключить файлик stm32f10x.h вот в чём дело..

Пишу #include "stm32f10x.h" - ошибка ...

А без него-то никак!

а как вообще подключить сишный хидер к асмовому проекту? 07.gif
Go to the top of the page
 
+Quote Post
LWW
сообщение Nov 29 2010, 19:38
Сообщение #3


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

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



Упс.. А что, бывают разные хидеры?

Я в IAR подключаю хидер для NEC 8-битника
#include "io78f9212.h"

и всё работает. Правда в keil никогда до этого не пробовал. Но маленький проектик на C - создаётся, компилируется. А надо на ассемблере..
Go to the top of the page
 
+Quote Post
toweroff
сообщение Nov 29 2010, 21:20
Сообщение #4


Гуру
******

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



Цитата(LWW @ Nov 29 2010, 22:38) *
Упс.. А что, бывают разные хидеры?

Я в IAR подключаю хидер для NEC 8-битника
#include "io78f9212.h"

и всё работает. Правда в keil никогда до этого не пробовал. Но маленький проектик на C - создаётся, компилируется. А надо на ассемблере..

чисто на асме не делал, но синтаксис-то языков, уж простите, разный laughing.gif
Go to the top of the page
 
+Quote Post
LWW
сообщение Nov 29 2010, 22:30
Сообщение #5


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

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



Мдааа... Перекопал я всё, перекопал, и понял. Заголовочгый файл для АСМа придётся сделать ручками, из сишного варианта. Напрямую прикрутить его к АСМ-проекту нельзя. В принципе это не очень сложно, просто назначить мнемоники и соотв. им цифры.

Хотя странно. В том же IAR, для асемблера под 8bit NEC я использую заголовочный файл на Си. И всё работает.

До какой же степени всё запущено... АСМ вообще практически не поддерживается в среде АРМ-процессоров. Ни хороших примеров, ни заголовочного файла тебе..

Удивительно laughing.gif

Ведь именно АРМ, а в особенности новый Cortex - рай для ассемблерщика! Какой роскошный набор команд! Да при таких частотах, с такой периферией, из ушей лезет....

Сообщение отредактировал LWW - Nov 29 2010, 22:30
Go to the top of the page
 
+Quote Post
firstvald
сообщение Nov 29 2010, 22:41
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 580
Регистрация: 3-06-08
Пользователь №: 38 041



Цитата(LWW @ Nov 30 2010, 01:30) *
- рай для ассемблерщика! Какой роскошный набор команд! Да при таких частотах, с такой периферией, из ушей лезет....


Это чистое искусство, а как до прозы доходит - написать прогу хотябы простейшую, чтобы пару плавающих чисел умножала, так рай заканчивается.
Go to the top of the page
 
+Quote Post
LWW
сообщение Nov 30 2010, 00:02
Сообщение #7


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

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



ой.. да ладно.. rolleyes.gif
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Nov 30 2010, 15:38
Сообщение #8


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

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



Цитата(LWW @ Nov 29 2010, 22:38) *
Я в IAR подключаю хидер для NEC 8-битника
#include "io78f9212.h"
и всё работает.

Это хитрая фича IAR'овского ассемблера, что он понимает синтаксис Си-файлов.
Все остальные ассемблеры, которые я видел, слово "#define", например, не воспринимают.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
vallav
сообщение Dec 9 2010, 17:06
Сообщение #9


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(LWW @ Nov 30 2010, 01:30) *
Ведь именно АРМ, а в особенности новый Cortex - рай для ассемблерщика! Какой роскошный набор команд! Да при таких частотах, с такой периферией, из ушей лезет....


Да где же Вы рай то нашли?
Машинный код в ARM заточен под C в ущерб эффективности на ASM.
Именно поэтому код на C практически не проигрывает коду на ASM.

Кстати, писать чистую ASM прогу неудобно.
Намного удобнее писать на C а отдельные критические куски в виде функций
на ASM. В которых можно использовать Сишные переменные и константы.
Тут самое сложное - разобраться, как производится передача параметров в Смшную функцию.
Go to the top of the page
 
+Quote Post
LWW
сообщение Dec 9 2010, 17:13
Сообщение #10


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

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



Благодаря такому вот взгляду на возможности ассемблера и потенциал 32-битной архитектуры и производятся сейчас глючные тормознутые телефоны с процессорами на 600мГц.
Go to the top of the page
 
+Quote Post
ASN
сообщение Dec 9 2010, 18:23
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326



LWW
Именно, благодаря такому вот взгляду на возможности ассемблера мы имеет такое многообразие телефонов (смартфонов, ebook'ов и прочих гаджетов) за очень небольшие деньги.
Использование ассемблера для ARM имеет смысл только в очень узком круге задач, где экономия в 3-4 команды в функции, даст выигрыш 5-10 % общей производительности.
Кстати, имеет смысл почитать.
Go to the top of the page
 
+Quote Post
vallav
сообщение Dec 9 2010, 18:34
Сообщение #12


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

Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977



Цитата(ASN @ Dec 9 2010, 21:23) *
LWW
Именно, благодаря такому вот взгляду на возможности ассемблера мы имеет такое многообразие телефонов (смартфонов, ebook'ов и прочих гаджетов) за очень небольшие деньги.
Использование ассемблера для ARM имеет смысл только в очень узком круге задач, где экономия в 3-4 команды в функции, даст выигрыш 5-10 % общей производительности.
Кстати, имеет смысл почитать.


Есть штуки, которые на C просто не изобразить.
Например запись в кольцевой буфер из регистров r0-r12 значения из внешнего порта.

Go to the top of the page
 
+Quote Post
LWW
сообщение Dec 9 2010, 20:55
Сообщение #13


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

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



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

Хотя тут спорить не буду. Осей не писал и не могу знать, можно ли написать тот же линукс на ассемблере, когда камни так часто меняются.

Хехех.. В работе на младшеньких ARM линукса не видел, но уже представил, какой он тормозячий... Если даже на пнях помню как-то, поставил линукс, так думал что при этой жизни вообще не дождусь результатов его деятельности..

Нужно не камни менять, а программы грамотно писать. Тогда и код переписывать, раз в 25 лет придётся, не чаще.

Сообщение отредактировал LWW - Dec 9 2010, 20:55
Go to the top of the page
 
+Quote Post
toweroff
сообщение Dec 9 2010, 21:07
Сообщение #14


Гуру
******

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



bb-offtopic.gif Чойта я сразу вспомнил старый добрый ZX-Spectrum sm.gif
Go to the top of the page
 
+Quote Post
LWW
сообщение Dec 9 2010, 21:14
Сообщение #15


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

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



Да-да... И я его хорошо помню. Особенно блок питания 5В 1А, который заменял калорифер с небольшом помещении.

Но времена-то меняются. А для Z80 я писал на ассемблере такие вещи, что знатоки поражались. Правда до ума их так и не доводил, маленький был.. cool.gif
Go to the top of the page
 
+Quote Post
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 Текстовая версия Сейчас: 20th July 2025 - 20:52
Рейтинг@Mail.ru


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