I'm writing code in assembly and i have a big trouble solving the error below. Tried to find solutions all over the internet, but didn't managed to find a suitable solution. i'm using CSS 8.3.1.00004 and the EK-TM4C123GXL LauchPad. The code itself is scissored from a larger one that i wrote, i wanted to test a simple servo motor here (i also got the same error for the larger one), so this code have some unnecessary codes, but those shouldn't interfere. Also the code may not look good as i'm not used to coding, i need to resolve this problem for thesis.
So please help me, thank you!
Here's the build/error message:
**** Build of configuration Release for project Szervo ****
"C:\\ti\\ccsv8\\utils\\bin\\gmake" -k -j 4 all -O
Building target: "Szervo.out"
Invoking: ARM Linker
"C:/ti/ccsv8/tools/compiler/ti-cgt-arm_18.1.4.LTS/bin/armcl" -mv7M4 --code_state=16 --float_support=FPv4SPD16 -me -O2 --define=ccs="ccs" --define=PART_TM4C1231H6PM --gcc --diag_warning=225 --diag_wrap=off --display_error_number --abi=eabi -z -m"Szervo.map" --heap_size=0 --stack_size=0 -i"C:/ti/ccsv8/tools/compiler/ti-cgt-arm_18.1.4.LTS/lib" -i"C:/ti/ccsv8/tools/compiler/ti-cgt-arm_18.1.4.LTS/include" --reread_libs --diag_wrap=off --display_error_number --warn_sections --xml_link_info="Szervo_linkInfo.xml" -o "Szervo.out" "./main.obj" "./tm4c123gh6pm_startup_ccs.obj" "../tm4c123gh6pm.cmd" -llibc.a
<Linking>
error #10056: symbol "_c_int00" redefined: first defined in "./main.obj"; redefined in "C:\ti\ccsv8\tools\compiler\ti-cgt-arm_18.1.4.LTS\lib\rtsv7M4_T_le_v4SPD16_eabi.lib<boot_cortex_m.c.obj>"
error #10010: errors encountered during linking; "Szervo.out" not built
>> Compilation failure
makefile:142: recipe for target 'Szervo.out' failed
gmake[1]: *** [Szervo.out] Error 1
makefile:138: recipe for target 'all' failed
gmake: *** [all] Error 2
**** Build Finished ****
Here's the whole code for the test program i try running.
;=========================================================================================================
; Szervohajtas
; By Miklós Áron (2020.01.31.)
; Designed for Tiva Connected Launchpad (TM4C123GH6PMI)
;=========================================================================================================
; Description:
;=========================================================================================================
.global RESET ; Define entry point
.thumb ; use thumb, duh
.text ; set memory location to flash
.align 4 ; align on 32-bit boundary
;------------------------------------------------------------------------------
; Interrupt Vectors
;------------------------------------------------------------------------------
.sect ".reset" ; MSP430 RESET Vector
.short RESET
WDT_CTL_0 .field 0x40000008,32
RESET: .asmfunc
mov.w SP, #0x0280 ; Initialize stackpointer (D0)
ldr R1, WDT_CTL_0
mov R0, #0x00000000
LDR R0, [R1]
B _c_int00
.endasmfunc
;------------------------------------------------------------------------------
; Main code
;------------------------------------------------------------------------------
.global _c_int00 ; makes main accessible from outside this file.
.global init
.thumb ; use thumb, duh
.text ; set memory location to flash
.align 4 ; align on 32-bit boundary
;=========================================================================================================
; Hardware Constants
;=========================================================================================================
GPIO_PORTB_DATA_ALL_R .field 0x400053FC,32
GPIO_PORTB_DIR_R .field 0x40005400,32
GPIO_PORTB_AFSEL_R .field 0x40005420,32
GPIO_PORTB_DR8R_R .field 0x40005508,32
GPIO_PORTB_PUR_R .field 0x40005510,32
GPIO_PORTB_PDR_R .field 0x40005514,32
GPIO_PORTB_DEN_R .field 0x4000551C,32
GPIO_PORTB_LOCK_R .field 0x40005520,32
GPIO_PORTB_CR_R .field 0x40005524,32
GPIO_PORTB_AMSEL_R .field 0x40005528,32
GPIO_PORTB_PCTL_R .field 0x4000552C,32
GPIO_PORTC_DATA_ALL_R .field 0x400063FC,32
GPIO_PORTC_DIR_R .field 0x40006400,32
GPIO_PORTC_AFSEL_R .field 0x40006420,32
GPIO_PORTC_DR8R_R .field 0x40006508,32
GPIO_PORTC_PUR_R .field 0x40006510,32
GPIO_PORTC_PDR_R .field 0x40006514,32
GPIO_PORTC_DEN_R .field 0x4000651C,32
GPIO_PORTC_LOCK_R .field 0x40006520,32
GPIO_PORTC_CR_R .field 0x40006524,32
GPIO_PORTC_AMSEL_R .field 0x40006528,32
GPIO_PORTC_PCTL_R .field 0x4000652C,32
GPIO_PORTD_DIR_R .field 0x40007400,32
GPIO_PORTD_AFSEL_R .field 0x40007420,32
GPIO_PORTD_PUR_R .field 0x40007510,32
GPIO_PORTD_PDR_R .field 0x40007514,32
GPIO_PORTD_DEN_R .field 0x4000751C,32
GPIO_PORTD_LOCK_R .field 0x40007520,32
GPIO_PORTD_CR_R .field 0x40007524,32
GPIO_PORTD_AMSEL_R .field 0x40007528,32
GPIO_PORTD_PCTL_R .field 0x4000752C,32
GPIO_PORTE_DATA_ALL_R .field 0x400243FC,32
GPIO_PORTE_DIR_R .field 0x40024400,32
GPIO_PORTE_AFSEL_R .field 0x40024420,32
GPIO_PORTE_PUR_R .field 0x40024510,32
GPIO_PORTE_PDR_R .field 0x40024514,32
GPIO_PORTE_DEN_R .field 0x4002451C,32
GPIO_PORTE_LOCK_R .field 0x40024520,32
GPIO_PORTE_CR_R .field 0x40024524,32
GPIO_PORTE_AMSEL_R .field 0x40024528,32
GPIO_PORTE_PCTL_R .field 0x4002452C,32
GPIO_PORTF_DATA_ALL_R .field 0x400253FC,32
GPIO_PORTF_DIR_R .field 0x40025400,32
GPIO_PORTF_AFSEL_R .field 0x40025420,32
GPIO_PORTF_PUR_R .field 0x40025510,32
GPIO_PORTF_PDR_R .field 0x40025514,32
GPIO_PORTF_DEN_R .field 0x4002551C,32
GPIO_PORTF_LOCK_R .field 0x40025520,32
GPIO_PORTF_CR_R .field 0x40025524,32
GPIO_PORTF_AMSEL_R .field 0x40025528,32
GPIO_PORTF_PCTL_R .field 0x4002552C,32
GPIO_LOCK_KEY .field 0x4C4F434B,32 ;Unlocks the GPIO_CR register
SYSCTL_RCGCGPIO_R .field 0x400FE608,32
RCC .field 0x400FE060,32
RCGC0 .field 0x400FE100,32
RCGC2 .field 0x400FE108,32
GPIOPCTL_B .field 0x4000552C,32
PWM0CTL .field 0x40028040,32
PWM0GENA .field 0x40028060,32
PWM0GENB .field 0x40028064,32
PWM1GENA .field 0x400280A0,32
PWM1GENB .field 0x400280A4,32
PWM0LOAD .field 0x40028050,32
PWM1LOAD .field 0x40028090,32
PWM0CMPA .field 0x40028058,32
PWM0CMPB .field 0x4002805C,32
PWM1CMPA .field 0x40028098,32
PWM1CMPB .field 0x4002809C,32
PWMENABLE .field 0x40028008,32
ALT_IO_B .field 0x44440000,32
PE0 .field 0x40024004,32
PE1 .field 0x40024008,32
PE2 .field 0x40024010,32
PE3 .field 0x40024020,32
PE4 .field 0x40024040,32
PE5 .field 0x40024080,32
PD0 .field 0x40007004,32
PD1 .field 0x40007008,32
PD2 .field 0x40007010,32
PD3 .field 0x40007020,32
PD6 .field 0x40007100,32
PD7 .field 0x40007200,32
PC4 .field 0x40006040,32
PC5 .field 0x40006080,32
;=========================================================================================================
; Custom Constants
;=========================================================================================================
XTCP .field 0x20000000,32
YTCP .field 0x20000004,32
ZTCP .field 0x20000008,32
elojel .field 0x2000000C,32 ;Az aktuális szubrutinhoz tartozó előjelet jegyzi meg, szubrutinokon kivül nincs értelmezve.
tri0 .field 0x20000010,32
tri1 .field 0x20000014,32
tri2 .field 0x20000018,32
tri3 .field 0x2000001C,32
tri4 .field 0x20000020,32
tri5 .field 0x20000024,32
tri6 .field 0x20000028,32
tri7 .field 0x2000002C,32
pszi .field 0x20000030,32
theta .field 0x20000034,32
fi .field 0x20000038,32
XCS .field 0x2000003C,32
YCS .field 0x20000040,32
ZCS .field 0x20000044,32
L0hossz .field 0x20000060,32
L1hossz .field 0x20000064,32
L2hossz .field 0x20000068,32
L3hossz .field 0x2000006C,32
Rhossz .field 0x20000070,32
Lhossz .field 0x20000074,32
epszilon .field 0x20000078,32
delta .field 0x2000007C,32
lx .field 0x20000080,32
ly .field 0x20000084,32
lz .field 0x20000088,32
mx .field 0x2000008C,32
my .field 0x20000090,32
mz .field 0x20000094,32
nx .field 0x20000098,32
ny .field 0x2000009C,32
nz .field 0x20000100,32
magassag .field 0x20000104,32
ahossz .field 0x20000108,32
;=========================================================================================================
; Program Code
;=========================================================================================================
_c_int00: .asmfunc
B init
.endasmfunc
.global main
.thumb ; use thumb, duh
.text ; set memory location to flash
.retain
.retainrefs
.align 4 ; align on 32-bit boundary
;------------main------------
main:
LDR R1, PD0 ;pointer to PD0
LDR R2, [R1] ;read just PD0
NOP
ADD R3, R2 ;figyelőjel
CMP R2, #0
ITTTTT EQ
LDREQ R1, pszi ;z tengely körüli forgatás
LDREQ R2, [R1]
MOVEQ R9, #64 ;16bit törtrésznél 1/1024 radiánt jelent, ami megközelítőleg 1/17,9 fok
ADDEQ R2, R9
STREQ R2, [R1]
LDR R1, PD1 ;pointer to PD1
LDR R4, [R1] ;read just PD1
NOP
ADD R3, R4 ;figyelőjel
CMP R4, #0
ITTTTT EQ
LDREQ R1, pszi ;z tengely körüli forgatás
LDREQ R2, [R1]
MOVEQ R9, #64 ;16bit törtrésznél 1/1024 radiánt jelent, ami megközelítőleg 1/17,9 fok
SUBEQ R2, R9
STREQ R2, [R1]
;------------VEZERLES------------
;Meghatározza a PWM kitöltési tényezőjét a csuklók helyzetéből. Feltételezem, hogy az összes szög 0-180. (q1-q6)
;VAGYIS GONDOLD ÁT!!!
;Bemenet: nincs
;Kimenet: nincs
;A következőket módosítja: ?
VEZERLES:
MOV R2, #36408
MOV R6, #10
MUL R2, R6
LDR R1, pszi
LDR R3, [R1]
SMULL R4, R5, R3, R2
ADD R5, #1000
LDR R1, PWM0CMPA
STR R5, [R1]
NOP
NOP
B main
;------------Init------------
init:
BL All_Port_Run
BL PortB_Init
BL PortD_Init
BL PortE_Init
BL PortF_Init
BL PWM_init
B main
;------------All_Port_Run------------
;Aktíválja az B, D, E és F GPIO portok időzítőjét (timer)
;Bemenet: nincs
;Kimenet: nincs
;A következőket módosítja: R0, R1
All_Port_Run:
LDR R1, SYSCTL_RCGCGPIO_R ;1) activate clock for Port B, D, E és F
LDR R0, [R1]
ORR R0, R0, #0x3A ;set bit 1, 3, 4 és 5 to turn on clock
STR R0, [R1]
NOP
NOP ;allow time for clock to finish
BX LR
;------------PortB_Init------------
;Az B GPIO port inicializálása kimenetként, előtét
;ellenállás nélkül.
;Bemenet: nincs
;Kimenet: nincs
;A következőket modosítja: R0, R1
PortB_Init:
LDR R1, GPIO_PORTB_LOCK_R ;2) unlock the lock register
LDR R0, GPIO_LOCK_KEY ;unlock GPIO Port B Commit Register
STR R0, [R1]
LDR R1, GPIO_PORTB_CR_R ;enable commit for Port B
MOV R0, #0xFF ;1 means allow access
STR R0, [R1]
LDR R1, GPIO_PORTB_AMSEL_R ;3) disable analog functionality
MOV R0, #0 ;0 means analog is off
STR R0, [R1]
LDR R1, GPIO_PORTB_PCTL_R ;4) configure as GPIO
MOV R0, #0x00000000 ;0 means configure Port B as GPIO
STR R0, [R1]
LDR R1, GPIO_PORTB_DIR_R ;5) set direction register
MOV R0, #0xFF ;portB APB 0-7: output
STR R0, [R1]
LDR R1, GPIO_PORTB_AFSEL_R ;6) regular port function for 0-3 and alternate function for 4-7
MOV R0, #0xF0 ;0 means disable alternate function
STR R0, [R1]
LDR R1, GPIO_PORTB_PUR_R ;no pull-up resistors for Port B
MOV R0, #0x00 ;disable weak pull-up on Port B
STR R0, [R1]
LDR R1, GPIO_PORTB_PDR_R ;no pull-down resistors for Port B
MOV R0, #0x00 ;disable weak pull-down on Port B
STR R0, [R1]
LDR R1, GPIO_PORTB_DEN_R ;7) enable Port B digital port
MOV R0, #0xFF ;1 means enable digital I/O
STR R0, [R1]
BX LR
;------------PortD_Init------------
;A D GPIO port 0-3, 6-7 bitjének inicializálása kimenetként,
;7. bit pedig bemenetként, előtét ellenállás a port 7. bitjén.
;Bemenet: nincs
;Kimenet: nincs
;A következőket modosítja: R0, R1
PortD_Init:
LDR R1, GPIO_PORTD_LOCK_R ;2) unlock the lock register
LDR R0, GPIO_LOCK_KEY ;unlock GPIO Port D Commit Register
STR R0, [R1]
LDR R1, GPIO_PORTD_CR_R ;enable commit for Port D
MOV R0, #0xFF ;1 means allow access
STR R0, [R1]
LDR R1, GPIO_PORTD_AMSEL_R ;3) disable analog functionality
MOV R0, #0 ;0 means analog is off
STR R0, [R1]
LDR R1, GPIO_PORTD_PCTL_R ;4) configure as GPIO
MOV R0, #0x00000000 ;0 means configure Port D as GPIO
STR R0, [R1]
LDR R1, GPIO_PORTD_DIR_R ;5) set direction register
MOV R0, #0xFF ;portC APB 0-7: output
STR R0, [R1]
LDR R1, GPIO_PORTD_AFSEL_R ;6) regular port function
MOV R0, #0 ;0 means disable alternate function
STR R0, [R1]
LDR R1, GPIO_PORTD_PUR_R ;no pull-up resistors for Port D
MOV R0, #0x00 ;disable weak pull-up on Port D
STR R0, [R1]
LDR R1, GPIO_PORTD_PDR_R ;no pull-down resistors for Port D
MOV R0, #0x00 ;disable weak pull-down on Port D
STR R0, [R1]
LDR R1, GPIO_PORTD_DEN_R ;7) enable Port A digital port
MOV R0, #0xFF ;1 means enable digital I/O
STR R0, [R1]
BX LR
;------------PortE_Init------------
;Az E GPIO port inicializálása bemenetként, előtét
;ellenállás a port 0-5. bitjein.
;Bemenet: nincs
;Kimenet: nincs
;A következőket modosítja: R0, R1
PortE_Init:
LDR R1, GPIO_PORTE_LOCK_R ;2) unlock the lock register
LDR R0, GPIO_LOCK_KEY ;unlock GPIO Port E Commit Register
STR R0, [R1]
LDR R1, GPIO_PORTE_CR_R ;enable commit for Port E
MOV R0, #0xFF ;1 means allow access
STR R0, [R1]
LDR R1, GPIO_PORTE_AMSEL_R ;3) disable analog functionality
MOV R0, #0 ;0 means analog is off
STR R0, [R1]
LDR R1, GPIO_PORTE_PCTL_R ;4) configure as GPIO
MOV R0, #0x00000000 ;0 means configure Port E as GPIO
STR R0, [R1]
LDR R1, GPIO_PORTE_DIR_R ;5) set direction register
MOV R0, #0x00 ;portE APB 0-5: input (input is default)
STR R0, [R1]
LDR R1, GPIO_PORTE_AFSEL_R ;6) regular port function
MOV R0, #0 ;0 means disable alternate function
STR R0, [R1]
LDR R1, GPIO_PORTE_PUR_R ;pull-up resistors for Port E bit 0-5
MOV R0, #0xFF ;enable weak pull-up on Port E bit 0-5
STR R0, [R1]
LDR R1, GPIO_PORTE_DEN_R ;7) enable Port E digital port
MOV R0, #0xFF ;1 means enable digital I/O
STR R0, [R1]
BX LR
;------------PortF_Init------------
;Az F GPIO port inicializálása kimenetként, előtét
;ellenállás nélkül.
;Bemenet: nincs
;Kimenet: nincs
;A következőket modosítja: R0, R1
PortF_Init:
LDR R1, GPIO_PORTF_LOCK_R ;2) unlock the lock register
LDR R0, GPIO_LOCK_KEY ;unlock GPIO Port F Commit Register
STR R0, [R1]
LDR R1, GPIO_PORTF_CR_R ;enable commit for Port F
MOV R0, #0xFF ;1 means allow access
STR R0, [R1]
LDR R1, GPIO_PORTF_AMSEL_R ;3) disable analog functionality
MOV R0, #0 ;0 means analog is off
STR R0, [R1]
LDR R1, GPIO_PORTF_PCTL_R ;4) configure as GPIO
MOV R0, #0x00000000 ;0 means configure Port F as GPIO
STR R0, [R1]
LDR R1, GPIO_PORTF_DIR_R ;5) set direction register
MOV R0, #0xFF ;portF APB 0-7: output
STR R0, [R1]
LDR R1, GPIO_PORTF_AFSEL_R ;6) alternate port function for 0-3 and regular function for 4
MOV R0, #0x0F ;0 means disable alternate function
STR R0, [R1]
LDR R1, GPIO_PORTF_PUR_R ;no pull-up resistors for Port F
MOV R0, #0x00 ;disable weak pull-up on Port F
STR R0, [R1]
LDR R1, GPIO_PORTF_PDR_R ;no pull-down resistors for Port F
MOV R0, #0x00 ;disable weak pull-down on Port F
STR R0, [R1]
LDR R1, GPIO_PORTF_DEN_R ;7) enable Port F digital port
MOV R0, #0xFF ;1 means enable digital I/O
STR R0, [R1]
BX LR
;------------PWM_init------------
;M0PWM0 (portB 6. bit), M0PWM1 (portB 7. bit), M0PWM2 (portB 4. bit)
;és M0PWM3 (portB 5. bit) inicializációja.
;Bemenet: nincs
;Kimenet: nincs
;A következőket modosítja: R0, R1
PWM_init:
LDR R1, RCGC0
MOV R0, #0x00100000 ;pwm órajel engedélyezése
STR R0, [R1]
LDR R1, RCGC2
MOV R0, #0x00000002 ;pwm órajel engedélyezése a Bportra
STR R0, [R1]
LDR R1, GPIOPCTL_B
LDR R0, ALT_IO_B ;Alternatív funkció kiválasztása a B port 4-7 lábain
STR R0, [R1]
LDR R1, RCC ;(Az alap órajel 80MHz)
MOV R0, #0x001A0000 ;PWM osztás engedélyezés és 32-es előosztás (2,5MHz)
STR R0, [R1]
LDR R1, PWM0CTL
MOV R0, #0x00000000 ;deaktiválja a PWN-t
STR R0, [R1]
LDR R1, PWM0GENA ;M0PWM0
MOV R0, #0x000000C8 ;PWM jel kialakítása feszültség szintek meghatározásával
STR R0, [R1]
LDR R1, PWM0GENB ;M0PWM1
MOV R0, #0x00000C08 ;PWM jel kialakítása feszültség szintek meghatározásával
STR R0, [R1]
LDR R1, PWM1GENA ;M0PWM2
MOV R0, #0x000000C8 ;PWM jel kialakítása feszültség szintek meghatározásával
STR R0, [R1]
LDR R1, PWM1GENB ;M0PWM3
MOV R0, #0x00000C08 ;PWM jel kialakítása feszültség szintek meghatározásával
STR R0, [R1]
LDR R1, PWM0LOAD
MOV R0, #0x0000C350 ;50000 -> 50Hz (25000:61A8)
STR R0, [R1]
LDR R1, PWM1LOAD
MOV R0, #0x0000C350 ;50000 -> 50Hz (25000:61A8)
STR R0, [R1]
LDR R1, PWM0CMPA
MOV R0, #1633 ;pwm00 kitöltési tényezője (1000-2000)
STR R0, [R1]
LDR R1, PWM0CMPB
MOV R0, #1133 ;pwm01 kitöltési tényezője (1000-2000)
STR R0, [R1]
LDR R1, PWM1CMPA
MOV R0, #1000 ;pwm02 kitöltési tényezője (1000-2000)
STR R0, [R1]
LDR R1, PWM1CMPB
MOV R0, #1000 ;pwm03 kitöltési tényezője (1000-2000)
STR R0, [R1]
LDR R1, PWM0CTL
MOV R0, #0x00000001 ;aktiválja a PWN-t
STR R0, [R1]
LDR R1, PWMENABLE
MOV R0, #0x0F ;Engedélyezi az M0PWM0-M0PWM3 PWM jelek kiírását a portokra
STR R0, [R1]
BX LR
User contributions licensed under CC BY-SA 3.0