Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Вопрос по IAR Embedded Workbench

Сб июл 06, 2013 13:23:38

У меня случилась такая проблема. Сразу предупрежу что в плане программирования на IAR-овском ассемблере я новичок, хотя вообщем систему команд THUMB-2 знаю. Приведу сразу свой код который я пытаюсь написать на IAR 6.4.0 неважно что и как он должен делать.
Код:
        NAME    main
       
NEXT    MACRO
        LDRH R1,[R0,#2]
        LDR PC,[R8,R1,LSL #2]
        ENDM
COMPILE MACRO
          IF _args == 1
          DC16 \1
          ENDIF
          IF _args == 2
          DC16 =\1
          DC32 =\1
          ENDIF
        ENDM
        PUBLIC  __iar_program_start
       
        SECTION .intvec : CODE (1)
        THUMB
       
        SECTION ThreadedCode : DATA (1)
        DC16 123
        ;MACRO LIT 1
        ;MACRO LIT 2
       
__iar_program_start
        B       main
        SECTION WORDS : CODE (1)
        THUMB

;NEXT     LDRH R1,[R0,#2]
;         LDR PC,[R8,R1,LSL #2]

ENTER   push {R0}
        ADD R0,R8,R1,LSL #2
        LDRH R1,[R0,#4]
        LDR PC,[R8,R1,LSL #2]

EXIT    pop {R0}
        NEXT

PLUS    LDMIA R2!,{R4,R5}
        ADD R4,R5,R4
        STMDB R2!,{R4}
        NEXT

LIT     ADD R1,R1,#1
        LDR R1,[R8,R1,LSL #2]
        STMDB R2!,{R4}
        NEXT
        ;LDRH R1,[R0],#2
        ;LDR PC,[R8,R1,LSL #2]
       
        SECTION .text : CODE (1)
        THUMB
 
main    NOP
        ADD R1,R2,R3
        B main

        END

дело в том что как только я добавляю в код секцию для данных:
SECTION ThreadedCode : DATA (1)
DC16 123
то ИАР начинает выдавать ошибку Error[Lp001]: no definition for init routine "__iar_copy_init3"
вообщем подскажите в чём проблема и как её исправить??

Re: Вопрос по IAR Embedded Workbench

Сб июл 06, 2013 14:39:23

Программировать ARM довольно сложно, на ассемблере еще труднее.
Во первых даже 64К флеши ассемблером запрограммировать терпения не хватит :-)
Во вторых поддерживать такой проект также проблематично.

Если для IAR AVR есть "Mixing C and assembler" то для ARM такого я не видел.
Типовой ответ - смотрите сгенерированый код и делайте аналогично.

Если переходит на С нет желания, то в данном конкретном случае рекомендую поискать/почитать документацию по формированию скрипта для линкера.

Так как не вся программа может находиться во флеш, часть кода может быть перемещена в оперативную память для ускорения работи.
Кроме того если вы объявляете инициализированные переменные их вы сами должны инициализировать. При программировании на С IAR самостоятельно формирует секцию которая инициализирует данные и обнуляет неинициализированные.

Re: Вопрос по IAR Embedded Workbench

Вс июл 07, 2013 09:09:30

И всё таки хотелось бы побольше конкретики.
Если для IAR AVR есть "Mixing C and assembler" то для ARM такого я не видел.
Типовой ответ - смотрите сгенерированый код и делайте аналогично.

поповоду "Mixing C and assembler" мне си тут ненужен вообще я собираю писать на чистом ассемблере, а если вы встречали хороший пример программы на ассемблере под ИАР то буду признателен если дадите ссылку.
поискать/почитать документацию по формированию скрипта для линкера

ну посоветуйте тогда что надо почитать.
Так как не вся программа может находиться во флеш, часть кода может быть перемещена в оперативную память для ускорения работи.
Кроме того если вы объявляете инициализированные переменные их вы сами должны инициализировать. При программировании на С IAR самостоятельно формирует секцию которая инициализирует данные и обнуляет неинициализированные.

тут я не понял, поясните пожалуйста подробнее что я сделал не так и как это исправить.

Re: Вопрос по IAR Embedded Workbench

Вс июл 07, 2013 11:55:51

Я не работаю с ассемблером, я постарался намекнуть, что ассемблер используют только на критических участках программы и очень редко.
Нету даже документа как это делать.
Я встречал только несколько функций в MP3 плеере.
Полное руководство легко ищется по "iar assembler arm reference guide"
Кроме собственно программы важное значение имеет скрипт линкера, который указывает какие части кода и программы где помещать.

Re: Вопрос по IAR Embedded Workbench

Вс июл 07, 2013 12:52:54

Если бы это был родной ассемблер, который в Keil, то я бы может чего подсказал, а IARом никогда не пользовался. Попробуй поискать, что делает эта функция. Попробуй скомпилировать простой пример на си и посмотреть как он будет выглядеть в виде ассемблера.

Re: Вопрос по IAR Embedded Workbench

Вс июл 07, 2013 23:22:34

В CMSIS во всех примерах для STM32 есть файлы вида startup_stm32f10x.S , которые на ассемблере делают начальную инициализацию и объявляют таблицу прерываний. При желании можно с них начать. Но конечно да - писать полный проект на asm для STM32 - это потеря времени.

Re: Вопрос по IAR Embedded Workbench

Пн июл 08, 2013 08:37:05

Ну ненадо мне только сказки рассказывать что на ассемблере писать это потеря времени. Ничё такого сверхсложного нет в ассемблере. Да и вообще как то разговор уходит не в то русло. Неужели никто и никогда не писал на ассемблере под ИАР?? Мне до сих пор непонятно почему когда я пытаюсь создать секцию данных у меня вылезает ошибка "__iar_copy_init3".

Re: Вопрос по IAR Embedded Workbench

Пн июл 08, 2013 12:43:56

Найди документы IAR по ассемблеру и компоновщику. Поищи в них описание этой функции, или просто в интернете поищи. Когда поймешь, что она делает, тогда, думаю, твоя проблема сама собой разрешится.

Re: Вопрос по IAR Embedded Workbench

Пн июл 08, 2013 15:55:03

К сожалению в ближайшие 6-7 лет не писал на ассемблере. Максимум - небольшие вставки кода на ассемблере в time critical местах. Да еще и такой зоопарк компиляторов под этот arm. Я вот к примеру пользуюсь arm gcc (он и asm код умеет обрабатывать).
Ответить