В статье [Где взять, как подключить, как пользоваться] было описано как с помощью загрузчика запускать в памяти RAM образ кода, хранящегося в памяти EEPROM. Если таким образом зеркалировать все адресное простраство памяти EEPROM (640 байт для STM8S103F3), а оставшиеся 384 ячейки памяти RAM использовать под стек, то мы сталкнемся с нехваткой оперативной памяти для хранения переменных в "куче".
В этой статье попытаемся составить список ячеек области HW Registers, которые потенциально можно использовать для хранения переменных. Анализ показал, что резервные ячейки области HW Registers не имеют физического воплощения и всегда читаются как $00 вне зависимости от записываемой в них величины. Здесь приведем те ячейки которые читаются записываемой в них величиной. Следует иметь ввиду, что регистры в этой области имеют связь с аппаратными модулями. Поэтому не следует выбирать для хранения переменных регистры в используемых вами аппаратных модулях. Регистры приведены в порядке: адрес, инициализируемое при сбросе значение, название регистра, описание регистра:
$5002 00 PA_DDR ; Port A data direction register $5003 00 PA_CR1 ; Port A control register 1 $5005 00 PB_ODR ; Port B data output latch register $5008 20 PB_CR1 ; Port B control register 1 $500A 00 PC_ODR ; Port C data output latch register $500C 00 PC_DDR ; Port C data direction register $500D 00 PC_CR1 ; Port C control register 1 $500F 00 PD_ODR ; Port D data output latch register $5011 00 PD_DDR ; Port D data direction register $5013 00 PD_CR2 ; Port D control register 2 $50A0 00 EXTI_CR1 ; External interrupt control register 1 $5200 00 SPI_CR1 ; SPI Control Register 1 $5201 00 SPI_CR2 ; SPI Control Register 2 $5202 00 SPI_ICR ; SPI Interrupt Control Register $5212 00 I2C_FREQR ; I2C frequency register $5213 00 I2C_OARL ; I2C Own address register low $5216 00 I2C_DR ; I2C data register $521A 00 I2C_ITR ; I2C interrupt control register $521B 00 I2C_CCRL ; I2C Clock control register low $521D 02 I2C_TRISER ; I2C TRISE register $5250 00 TIM1_CR1 ; TIM1 Control register 1 $5252 00 TIM1_SMCR ; TIM1 Slave Mode Control register $5253 00 TIM1_ETR ; TIM1 external trigger register $5254 00 TIM1_IER ; TIM1 Interrupt enable register $5258 00 TIM1_CCMR1 ; TIM1 Capture/Compare mode register 1 $5259 00 TIM1_CCMR2 ; TIM1 Capture/Compare mode register 2 $525A 00 TIM1_CCMR3 ; TIM1 Capture/Compare mode register 3 $525B 00 TIM1_CCMR4 ; TIM1 Capture/Compare mode register 4 $525C 00 TIM1_CCER1 ; TIM1 Capture/Compare enable register 1 $525D 00 TIM1_CCER2 ; TIM1 Capture/Compare enable register 2 $525E 00 TIM1_CNTRH ; Data bits High $525F 00 TIM1_CNTRL ; Data bits Low $5260 00 TIM1_PSCRH ; Data bits High $5261 00 TIM1_PSCRL ; Data bits Low $5262 FF TIM1_ARRH ; Data bits High $5263 FF TIM1_ARRL ; Data bits Low $5264 00 TIM1_RCR ; TIM1 Repetition counter register $526B 00 TIM1_CCR4H ; Data bits High $526C 00 TIM1_CCR4L ; Data bits Low $526D 00 TIM1_BKR ; TIM1 Break register $5302 00 ; reserved $5307 00 TIM2_CCMR1 ; TIM2 Capture/Compare mode register 1 $5308 00 TIM2_CCMR2 ; TIM2 Capture/Compare mode register 2 $5309 00 TIM2_CCMR3 ; TIM2 Capture/Compare mode register 3 $530C 00 TIM2_CNTRH ; Data bits High $530D 00 TIM2_CNTRL ; Data bits Low $530F FF TIM2_ARRH ; Data bits High $5310 FF TIM2_ARRL ; Data bits Low $5311 00 TIM2_CCR1H ; Data bits High $5312 00 TIM2_CCR1L ; Data bits Low $5313 00 TIM2_CCR2H ; Data bits High $5314 00 TIM2_CCR2L ; Data bits Low $5315 00 TIM2_CCR3H ; Data bits High $5316 00 TIM2_CCR3L ; Data bits Low $5342 00 ; reserved $5346 00 TIM4_CNTR ; TIM4 Counter $5348 FF TIM4_ARR ; TIM4 Auto-reload register $5401 00 ADC_CR1 ; ADC Configuration Register 1 $5407 00 ADC_TDRL ; Schmitt trigger disable Low $5408 FF ADC_HTRH ; High Threshold Register High $540A 00 ADC_LTRH ; Low Threshold Register High $540F 00 ADC_AWCRL ; Analog Watchdog Control register Low
Последняя версия загрузчика и описание работы с ним в статье [Где взять, как подключить, как пользоваться] .