16+
Понедельник
16 сентября
Вход |Карта сайта |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

ARM-контроллеры

 
Новая темаПравила РегистрацияСтатистика Архив
Вернуться в конференциюТопик полностью
evgeniy1294  (20.08.2019 14:20, просмотров: 602)
Пытаюсь склепать С-startup для stm'ок, заметил странное: при попытке обратиться к переменным, генерируемым линкером, как в примере ниже, компилятор генерирует не совсем корректный код - вместо известного мне значения в переменной оказывается 
мусор. Если пользоваться ассемблерной вставкой, то все ок.
extern volatile unsigned int __heap_start__;
extern volatile unsigned int __heap_end__;

static volatile uint32_t tmp;  // addr 0x20000190

volatile void startup()
{ 
  // Так работает
  asm("ldr r0, = __heap_start__");
  asm("ldr r1, =0x20000190");
  asm("str r0, [r1]");

  // А так нет
  tmp = __heap_start__;
} 
Ниже выхлоп дизассемблера, отличие всего на одну команду.
static volatile uint32_t tmp;
volatile void startup()
{
asm("ldr r0, = __heap_start__");
  ldr r0, =0x200001C8

asm("ldr r1, =0x20000190");
  ldr r1, =0x20000190 <tmp>


asm("str r0, [r1]");
  str r0, [r1]


tmp = __heap_start__;
  ldr r3, =0x200001C8
  ldr r3, [r3]
  ldr r2, =0x20000190 <tmp>
  str r3, [r2]

}
 [x][x][x][x][x][x] [x][x][x][x][x][x][x][x]

Тема выделяется по переводу строки или автоматом

 

Имя


Регистрация позволит вам редактировать и перемещать ваши сообщения и прикреплять к ним файлы.
 
Символы: á é ó ú ý « »
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7528 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXIX