En este tema voy a comentar un poco como gestiona el compilador Cosmic la memoria de un STM8.
Tablas de memoria
Los STM8 están formados por tablas de memoria:
- .bsct es el segmento que contiene datos inicializados en la página 0
- .ubsct es el segmento que contiene datos NO inicializados en la página 0
- .data es el segmento que contiene datos inicializados fuera de la página 0
- .bss es el segmento que contiene datos NO inicializados fuera de la página 0
Definiciones
Al definir nuestras variables globales lo podemos hacer de varias formas:
- @eeprom: dirige a la memoria eeprom del chip, la memoria de datos.
- @tiny: dirige a la memoria en la página 0
- @near: dirige a la memoria fuera de la página 0
si al definir las variables la inicializamos, quiere decir que la guardamos en otra parte de memoria:
- @tiny char aa; // dirige a .ubsct
- @tiny char aa = 10; // dirige a .bsct
- @near char aa; // dirige a .bss
- @near char aa = 10; // dirige a .data
Si no se especifica nada, el compilador decide dependiendo de su modelo.
La página 0 se limita a 256bytes, pero modificando el lkr se puede disminuir un apartardo para aumentar otro. Esto se raliza moidficando los parámetros -m.
La memoria definida como fuera de la página 0 es la memoria RAM del dispositivo y también se modifica con los parámetros -m.
Errores al compilar
Si al compilar te sale algún error similar a esto:
-
#error clnk XXXXXX.lkf:1 segment .bsct size overflow
-
#error clnk XXXXXX.lkf:1 segment .ubsct size overflow
Se debe a que estás dirigiendo todas las variables a la página 0 y la has saturado.
Soluciones
Para solucionar los errores anteriormente descritos tenemos varias opciones:
- Modificar el archivo .lkf y aumentar el tamaño de los parámetros -m
- Obligar la ubicación de las variables con tiny y near