大家好我正在开发这个程序,它的主要目的就像一个find_min函数。这是主要功能:
int main(void)
{
int i;
int dij[T][N]={{9,5,7,8}, //T and N are defined as 3 and 4 in this case
{7,9,6,9},
{10,8,8,7}};
int Dj[T][N]={{17,23,14,15},
{18,19,18,14},
{19,22,17,16}};
int n_res[T][2]={{N,0},
{0,0},
{0,0}};
// Call assembly language function
distrBF(T,(int*)n_res,(int*)dij,(int*)Dj);
for ( i=0; i<T ; i++ )
printf("%d %d\n", n_res[i][0], n_res[i][1]);
volatile static int loop = 0;
while (1) {
loop++;
}
}
这是distrBF.s:
distrBF:
PUSH {R14}
LDR R6,[R1]
MOV R9,R6
LOOP: LDR R4,[R2],#4
LDR R5,[R3],#4
ADD R8,R4,R5
@MOV R10,#1
SUBS R6,#1
FindMin: PUSH {R2-R3}
BL ELEMENT
MOV R5,R4
BL ELEMENT
ADD R7,R5,R4
CMP R7,R8
ITTT MI
MOVMI R8,R7
SUBMI R10,R9,R6
ADDMI R10,#1
ADD R2,#4
ADD R3,#4
SUBS R6,#1
BNE FindMin
STR R8,[R1],#4
STR R10,[R1],#4
MOV R6,R9
SUBS R0,#1
BNE LOOP
POP {R14}
BX LR
@ Subroutine ELEMENT
ELEMENT:
POP {R4}
LDR R4,[R4]
BX LR
NOP
.end
该程序是为每一行找到最小的(dij + Dj)。我一步一步跟踪我的程序,所有寄存器都包含正确的值。 (对于输出,n_res应该是{21,3,23,4,23,4})但是在它返回main.c并执行&#39; for&#39;声明,它将进入HardFault_handler。它说有一个ImpreciseErr错误,但我不知道如何解决这个问题。