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:

  1. Modificar el archivo .lkf y aumentar el tamaño de los parámetros -m
  2. Obligar la ubicación de las variables con tiny y near