Вопрос по IAR Embedded Workbench

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Родился
Сообщения: 17
Зарегистрирован: Чт июл 16, 2009 11:51:34

Сообщение Back-loz »

У меня случилась такая проблема. Сразу предупрежу что в плане программирования на 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"
вообщем подскажите в чём проблема и как её исправить??
Реклама
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Сообщение misyachniy »

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

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

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

Так как не вся программа может находиться во флеш, часть кода может быть перемещена в оперативную память для ускорения работи.
Кроме того если вы объявляете инициализированные переменные их вы сами должны инициализировать. При программировании на С IAR самостоятельно формирует секцию которая инициализирует данные и обнуляет неинициализированные.
Реклама
Родился
Сообщения: 17
Зарегистрирован: Чт июл 16, 2009 11:51:34

Сообщение Back-loz »

И всё таки хотелось бы побольше конкретики.
Если для IAR AVR есть "Mixing C and assembler" то для ARM такого я не видел.
Типовой ответ - смотрите сгенерированый код и делайте аналогично.
поповоду "Mixing C and assembler" мне си тут ненужен вообще я собираю писать на чистом ассемблере, а если вы встречали хороший пример программы на ассемблере под ИАР то буду признателен если дадите ссылку.
поискать/почитать документацию по формированию скрипта для линкера
ну посоветуйте тогда что надо почитать.
Так как не вся программа может находиться во флеш, часть кода может быть перемещена в оперативную память для ускорения работи.
Кроме того если вы объявляете инициализированные переменные их вы сами должны инициализировать. При программировании на С IAR самостоятельно формирует секцию которая инициализирует данные и обнуляет неинициализированные.
тут я не понял, поясните пожалуйста подробнее что я сделал не так и как это исправить.
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт июл 02, 2013 09:17:49

Сообщение misyachniy »

Я не работаю с ассемблером, я постарался намекнуть, что ассемблер используют только на критических участках программы и очень редко.
Нету даже документа как это делать.
Я встречал только несколько функций в MP3 плеере.
Полное руководство легко ищется по "iar assembler arm reference guide"
Кроме собственно программы важное значение имеет скрипт линкера, который указывает какие части кода и программы где помещать.
Реклама
Эиком - электронные компоненты и радиодетали
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Если бы это был родной ассемблер, который в Keil, то я бы может чего подсказал, а IARом никогда не пользовался. Попробуй поискать, что делает эта функция. Попробуй скомпилировать простой пример на си и посмотреть как он будет выглядеть в виде ассемблера.
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

В CMSIS во всех примерах для STM32 есть файлы вида startup_stm32f10x.S , которые на ассемблере делают начальную инициализацию и объявляют таблицу прерываний. При желании можно с них начать. Но конечно да - писать полный проект на asm для STM32 - это потеря времени.
Реклама
Родился
Сообщения: 17
Зарегистрирован: Чт июл 16, 2009 11:51:34

Сообщение Back-loz »

Ну ненадо мне только сказки рассказывать что на ассемблере писать это потеря времени. Ничё такого сверхсложного нет в ассемблере. Да и вообще как то разговор уходит не в то русло. Неужели никто и никогда не писал на ассемблере под ИАР?? Мне до сих пор непонятно почему когда я пытаюсь создать секцию данных у меня вылезает ошибка "__iar_copy_init3".
Вымогатель припоя
Аватара пользователя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

Сообщение menzoda »

Найди документы IAR по ассемблеру и компоновщику. Поищи в них описание этой функции, или просто в интернете поищи. Когда поймешь, что она делает, тогда, думаю, твоя проблема сама собой разрешится.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1433
Зарегистрирован: Вс дек 02, 2012 03:13:48
Откуда: Калининград

Сообщение balmer »

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

Вернуться в «ARM»