|
Keil + ассемблер, Новый пустой проект для ассемблера |
|
|
|
Nov 29 2010, 22:30
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 24-03-07
Пользователь №: 26 471

|
Мдааа... Перекопал я всё, перекопал, и понял. Заголовочгый файл для АСМа придётся сделать ручками, из сишного варианта. Напрямую прикрутить его к АСМ-проекту нельзя. В принципе это не очень сложно, просто назначить мнемоники и соотв. им цифры. Хотя странно. В том же IAR, для асемблера под 8bit NEC я использую заголовочный файл на Си. И всё работает. До какой же степени всё запущено... АСМ вообще практически не поддерживается в среде АРМ-процессоров. Ни хороших примеров, ни заголовочного файла тебе.. Удивительно Ведь именно АРМ, а в особенности новый Cortex - рай для ассемблерщика! Какой роскошный набор команд! Да при таких частотах, с такой периферией, из ушей лезет....
Сообщение отредактировал LWW - Nov 29 2010, 22:30
|
|
|
|
|
Dec 9 2010, 17:06
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(LWW @ Nov 30 2010, 01:30)  Ведь именно АРМ, а в особенности новый Cortex - рай для ассемблерщика! Какой роскошный набор команд! Да при таких частотах, с такой периферией, из ушей лезет.... Да где же Вы рай то нашли? Машинный код в ARM заточен под C в ущерб эффективности на ASM. Именно поэтому код на C практически не проигрывает коду на ASM. Кстати, писать чистую ASM прогу неудобно. Намного удобнее писать на C а отдельные критические куски в виде функций на ASM. В которых можно использовать Сишные переменные и константы. Тут самое сложное - разобраться, как производится передача параметров в Смшную функцию.
|
|
|
|
|
Dec 9 2010, 18:23
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 15-07-04
Из: g.Penza
Пользователь №: 326

|
LWWИменно, благодаря такому вот взгляду на возможности ассемблера мы имеет такое многообразие телефонов (смартфонов, ebook'ов и прочих гаджетов) за очень небольшие деньги. Использование ассемблера для ARM имеет смысл только в очень узком круге задач, где экономия в 3-4 команды в функции, даст выигрыш 5-10 % общей производительности. Кстати, имеет смысл почитать.
|
|
|
|
|
Dec 9 2010, 18:34
|
Частый гость
 
Группа: Участник
Сообщений: 197
Регистрация: 8-04-05
Пользователь №: 3 977

|
Цитата(ASN @ Dec 9 2010, 21:23)  LWWИменно, благодаря такому вот взгляду на возможности ассемблера мы имеет такое многообразие телефонов (смартфонов, ebook'ов и прочих гаджетов) за очень небольшие деньги. Использование ассемблера для ARM имеет смысл только в очень узком круге задач, где экономия в 3-4 команды в функции, даст выигрыш 5-10 % общей производительности. Кстати, имеет смысл почитать. Есть штуки, которые на C просто не изобразить. Например запись в кольцевой буфер из регистров r0-r12 значения из внешнего порта.
|
|
|
|
|
Dec 9 2010, 20:55
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 24-03-07
Пользователь №: 26 471

|
Ну правильно, разнообразие, многообразие.. Понастряпали всякой недоделанной техники, которая продаётся только для того, что бы сразу захотелось взять другое..
Хотя тут спорить не буду. Осей не писал и не могу знать, можно ли написать тот же линукс на ассемблере, когда камни так часто меняются.
Хехех.. В работе на младшеньких ARM линукса не видел, но уже представил, какой он тормозячий... Если даже на пнях помню как-то, поставил линукс, так думал что при этой жизни вообще не дождусь результатов его деятельности..
Нужно не камни менять, а программы грамотно писать. Тогда и код переписывать, раз в 25 лет придётся, не чаще.
Сообщение отредактировал LWW - Dec 9 2010, 20:55
|
|
|
|
|
Dec 10 2010, 00:28
|
Частый гость
 
Группа: Участник
Сообщений: 177
Регистрация: 24-03-07
Пользователь №: 26 471

|
В качестве примераВ начале статьи описана конфигурация железа. А дальше просто анекдот, что на этом железе сотворили несколько сотен или тысяч человек и те несколько миллиардов-триллионов-квадриллионов долларов, которые были вложены в разработку аппарата  Готов поверить, что аппаратная начинка сама по себе очень надёжная. Железки делать научились, такой агрегат может проработать сотню лет, выполняя возложенные на него функции. Этого и боятся..
|
|
|
|
|
Nov 15 2013, 16:27
|
Участник

Группа: Участник
Сообщений: 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.
|
|
|
|
|
Nov 16 2013, 17:16
|
Участник

Группа: Участник
Сообщений: 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-файл? примеры под конкретные ядра существуют?
|
|
|
|
|
Nov 17 2013, 03:45
|
Знающий
   
Группа: Свой
Сообщений: 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 { } }
|
|
|
|
|
Nov 17 2013, 07:44
|

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

|
Цитата(ЭнСб @ Nov 16 2013, 21:16)  можете подсказать, как для AREA задать адрес в коде программы без scatter-файла с которого секция начинается? скаттер либо используется ваш, либо генерится и используется исходя из заданных в красивых окошках значений Цитата(ЭнСб @ Nov 16 2013, 21:16)  scatter-файл? примеры под конкретные ядра существуют? скачайте документацию на линкер там все разжевано досконально
|
|
|
|
|
Nov 20 2013, 11:24
|
Участник

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

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