Programación de bytes de opciones ARM usando directivas de ensamblaje

1

Por lo tanto, al observar la hoja de datos de un controlador ARM específico, encontramos el espacio de direcciones que se asigna de la siguiente manera:

Hayvariasformasdelograresto,unadelascualesesatravésdeunarchivogeneradoautomáticamentequetienelossiguientescontenidos(condensados):

;Optionbyteorganization;-------------------------;Address[31:24][23:16][15:8][7:0];0x1FF80000-nRDP-RDP(0xFF5500AA);0x1FF80004-nUSER-USER(0xFF870078);0x1FF80008nWRP1nWRP0WRP1WRP0(0xFFFF0000);0x1FF8000CnWRP3nWRP2WRP3WRP2(0xFFFF0000)FLASH_OPTEQU1RDPEQU0xAAnRDPEQURDP:EOR:0xFFWRP00EQU0x00WRP01EQU0x00WRP02EQU0x00WRP03EQU0x00nWRP00EQUWRP00:EOR:0xFFnWRP01EQUWRP01:EOR:0xFFnWRP02EQUWRP02:EOR:0xFFnWRP03EQUWRP03:EOR:0xFFUSEREQU0x78nUSEREQUUSER:EOR:0xFFIFFLASH_OPT<>0AREA|.ARM.__AT_0x1FF80000|,CODE,READONLYDCBRDP,0x00,nRDP,0xFFDCBUSER,0x00,nUSER,0xFFDCBWRP00,WRP01,nWRP00,nWRP01DCBWRP02,WRP03,nWRP02,nWRP03ENDIF

Parecequeestearchivosimplementeproporcionaunaformaconfigurableparaconfigurarestosbytesdeopción,pero¿cómosehace?InvestiguéunpocoyresultóqueladirectivaAREAledicealensambladorquegenereunáreanueva,enestecasounáreadecódigoqueserásololectura.

Además,ladirectivaDCBasignamemoria,enestecaso16bytes,ylosinicializaconlosvaloresrespectivosdados.

Mipregunta,entonces,¿dóndeestálaespecificaciónconrespectoalaubicacióndeestebloquedememoriareciénasignado?Asaber,¿cómoseescribeelvalordeestebloquede16bytesenlosregistrosapropiados(0x1FF80000,etc.)?

Laúnicamencióndeestadirecciónestádadaporelargumento|.ARM.__AT_0x1FF80000|pasadoaAREA.Sinembargo,esteprimerargumentoessoloelnombredeestanuevaáreadeacuerdocon documentación .

O quizás la mejor pregunta es: ¿Cómo podemos especificar dónde se almacenará un ÁREA en la memoria?

    
pregunta sherrellbc

1 respuesta

2

El enlazador ARM coloca automáticamente las secciones con el prefijo __at en la dirección especificada. En el código C, especificaría la sección utilizando el atributo section , como este:

// place flash_key in a section called .ARM.__at_0x8000
long flash_key __attribute__((section(".ARM.__at_0x8000")));

Puedes controlar el comportamiento pasando --autoat o --noautoat al vinculador.

Consulte Colocación de una llave en la memoria flash con una sección __at del ARM Linker User Guide para más detalles.

    
respondido por el Tony K

Lea otras preguntas en las etiquetas