» »

C volatile array

C volatile array

slovencl ::

Takole imam definirane registre
#define REG1 (*(volatile uint16_t *)(0x0400))
#define REG2 (*(volatile uint16_t *)(0x0600))

Register v register potem kopiram enostavo
REG1=REG2;

Ni mi jasno kako se to dela v primeru arraya.
Rad bi skopiral array 10 registrov od REG1 naprej v 10 registrov od REG2 naprej.
Ali pa da bi array 10 registrov od REG1 skopiral v REG2 (če je REG2 fifo).

Mogoče kdo ve, kako se to v Cju naredi?

gumby ::

Kopiraš bajt po bajt v zanki. Ne moreš kar nizov prirejat, tole ni c#.
my brain hurts

slovencl ::

Ja, kako je vprašanje...

Sem naredil tako:
#define REG1 (*(volatile uint16_t *)(0x8a22))
#define REG2 (*(volatile uint16_t *)(0x8a44))

void _memcpy(volatile uint16_t *dst, volatile uint16_t *src, uint16_t num) {
  while (num--) {
        *dst++ = *src++;
        }
}

_memcpy(REG1, REG2, 6);


Pa ne naredi nič. V asm mi zoptmira ven ta del, ker nikjer ne uporabljam teh registrov.

Pardon, tako:
memcpy(&REG1, &REG2, 6);

Zgodovina sprememb…

  • spremenil: slovencl ()

johnnyyy ::

Narobe imaš definirane registre, definiraj oba registra kot:
volatile uint16_t *REG1=(uint16_t *) (0x8a22);
volatile uint16_t *REG2=(uint16_t *) (0x8a44);
In uporabljaj registra kot pointerja. Poleg tega ti v argumente funkcij ni potrebno pisati volatile.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C] - Atmel AVR

Oddelek: Programiranje
71510 (536) blay44
»

ESP8266 ESP-12E (NodeMCU 1.0)

Oddelek: Elektrotehnika in elektronika
453647 (2492) dc10
»

Imate rajši Win 7 kot Win 10? Imamo rešitev. (strani: 1 2 3 4 )

Oddelek: Operacijski sistemi
15347756 (37987) Cervantes
»

C in funkcije ter #define

Oddelek: Programiranje
463969 (2330) misek
»

[PHP] primerjava besed v stavkih

Oddelek: Programiranje
61088 (975) rokpok

Več podobnih tem