Forum: Mikrocontroller und Digitale Elektronik expected an asm string


von andi (Gast)


Lesenswert?

moin,

msp430, ok C wissen, kleines bis keines assembler wissen.
1
  int s_s_ctr;
2
  reg_buff = 0x0000;
3
  for (s_s_ctr = 0; s_s_ctr < CPU_REGISTERS; s_s_ctr++)
4
  {
5
    sprintf (buff1, "mov.w r");
6
    sprintf (buff2, "%d, reg_buff\n", s_s_ctr);
7
    strcat  (buff1, buff2);
8
    asm    (buff1);              
9
    stack[stack_nr].reg[s_s_ctr] = reg_buff;  
10
  }

der String in buff 1 lautet nach strcat "mov.w r0, reg_buff" (ohne das 
/n)
aber der compiler meckert "expected asm string"?

von Timmo H. (masterfx)


Lesenswert?

Dein Inline-Assembler Code muss bereits beim Kompilieren bekannt sein. 
Du kannst nicht einen String zur Laufzeit erzeugen und dann an die 
asm-Derektive weitergeben.

von andi (Gast)


Lesenswert?

also geht nur
1
  asm(" mov.w r0, reg_buff\n");
2
  stack[stc_ctr].reg[0] = reg_buff;
3
  asm(" mov.w r1, reg_buff\n");
4
  stack[stc_ctr].reg[1] = reg_buff;
5
  asm(" mov.w r2, reg_buff\n");
6
  stack[stc_ctr].reg[2] = reg_buff;
7
  asm(" mov.w r3, reg_buff\n");
8
  stack[stc_ctr].reg[3] = reg_buff;
9
  asm(" mov.w r4, reg_buff\n");
10
  stack[stc_ctr].reg[4] = reg_buff;
11
  asm(" mov.w r5, reg_buff\n");
12
  stack[stc_ctr].reg[5] = reg_buff;
13
  asm(" mov.w r6, reg_buff\n");
14
  stack[stc_ctr].reg[6] = reg_buff;
15
  asm(" mov.w r7, reg_buff\n");
16
  stack[stc_ctr].reg[7] = reg_buff;
17
  asm(" mov.w r8, reg_buff\n");
18
  stack[stc_ctr].reg[8] = reg_buff;
19
  asm(" mov.w r9, reg_buff\n");
20
  stack[stc_ctr].reg[9] = reg_buff;
21
  asm(" mov.w r10, reg_buff\n");
22
  stack[stc_ctr].reg[10] = reg_buff;
23
  asm(" mov.w r11, reg_buff\n");
24
  stack[stc_ctr].reg[11] = reg_buff;
25
  asm(" mov.w r12, reg_buff\n");
26
  stack[stc_ctr].reg[12] = reg_buff;
27
  asm(" mov.w r13, reg_buff\n");
28
  stack[stc_ctr].reg[13] = reg_buff;
29
  asm(" mov.w r14, reg_buff\n");
30
  stack[stc_ctr].reg[14] = reg_buff;
31
  asm(" mov.w r15, reg_buff\n");
32
  stack[stc_ctr].reg[15] = reg_buff;

?

von Karl H. (kbuchegg)


Lesenswert?

Ich würd mir an deiner Stelle auch mal ansehen, was der Compiler aus
1
  stack[stc_ctr].reg[0] = reg_buff;
macht.
Ich würde das nämlich als recht unwahrscheinlich ansehen, wenn der 
Compiler die anweisung ohne die Verwendung von Registern hinkriegt. 
Wodurch du nicht die Registerinhalte sicherst, die du denkst.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.