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

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

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

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

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

caxapa

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

AVR PIC MSP PLD,FPGA,DSP 

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

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

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

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
michas  (04.01.2018 18:00) , в ответ на Не в какие попало, а в какие положено по стандарту AAPCS. А в чем тайный смысл ручного распределения регистров? автор: a3r3
Посмотрел, по этому стандарту, указал регистры по нему, один фиг компилятор раскидал переменные как попало. Ладно, не стал прямо назначать регистры: 
register volatile uint32_t result_T1; register volatile uint32_t result_T0; register volatile uint32_t result_TRAA; register volatile uint32_t result_TR55; И один черт, складывает результат теста не в регистр а в озу на этом этапе (result_xx = count_err;). Ну и естественно портит следующий тест.
#define STRT_ADDR_RAM		(0x20000000)
#define SIZE_RAM		(0x4000)

void RamTest(void)	
{
		register uint32_t addres_ram;
		register uint32_t count_err;
	
    register volatile uint32_t result_T1;
    register volatile uint32_t result_T0;
    register volatile uint32_t result_TRAA;
    register volatile uint32_t result_TR55;
	
		#pragma push
		#pragma O0
		#pragma Otime
			
	  for (addres_ram = STRT_ADDR_RAM; addres_ram < STRT_ADDR_RAM + SIZE_RAM; addres_ram++)
    {
        *(__IO uint8_t*)addres_ram = 0x00;
    } 		
		for (addres_ram = STRT_ADDR_RAM; addres_ram < STRT_ADDR_RAM + SIZE_RAM; addres_ram++)
    {
        if ((*(__IO uint8_t*)addres_ram) != 0x00){
						count_err++;
				}
    }		
		result_T0 = count_err;
		count_err = 0;
		
		for (addres_ram = STRT_ADDR_RAM; addres_ram < STRT_ADDR_RAM + SIZE_RAM; addres_ram++)
    {
        *(__IO uint8_t*)addres_ram = 0xFF;
    } 
		for (addres_ram = STRT_ADDR_RAM; addres_ram < STRT_ADDR_RAM + SIZE_RAM; addres_ram++)
    {
        if ((*(__IO uint8_t*)addres_ram) != 0xFF){
						count_err++;
				}
    }				
		result_T1 = count_err;
		count_err = 0;

	  for (addres_ram = STRT_ADDR_RAM; addres_ram < STRT_ADDR_RAM + SIZE_RAM; addres_ram++)
    {
        *(__IO uint8_t*)addres_ram = 0x55;
    } 

		for (addres_ram = STRT_ADDR_RAM; addres_ram < STRT_ADDR_RAM + SIZE_RAM; addres_ram++)
    {
        if ((*(__IO uint8_t*)addres_ram) != 0x56){
						count_err++;
				}
    }				
		result_TR55 = count_err;
		count_err = 0;


	  for (addres_ram = STRT_ADDR_RAM; addres_ram < STRT_ADDR_RAM + SIZE_RAM; addres_ram++)
    {
        *(__IO uint8_t*)addres_ram = 0xAA;
    }
		for (addres_ram = STRT_ADDR_RAM; addres_ram < STRT_ADDR_RAM + SIZE_RAM; addres_ram++)
    {
        if ((*(__IO uint8_t*)addres_ram) != 0xAA){
						count_err++;
				}
    }				
		result_TRAA = count_err;
		count_err = 0;
		
		#pragma pop		
}
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7527 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVIII