Страница 1 из 1

Pic16f887 компиляция Си кода

Добавлено: Сб мар 29, 2014 17:03:40
RoboC
Как заставить компилятор Hi-tech компилировать "SybolT_1= 1" без его дурацкой оптимизации(так же как SybolT_2= 3 ) ?

Код: Выделить всё

;main.c: 379: SybolT_2= 3;
	movlw	(03h)
	bsf	status, 5	;RP0=1, select bank3
	bsf	status, 6	;RP1=1, select bank3
	movwf	(??_main+0)^0180h+0
	movf	(??_main+0)^0180h+0,w
	bcf	status, 5	;RP0=0, select bank0
	bcf	status, 6	;RP1=0, select bank0
	movwf	(_SybolT_2)
	line	380
	
l11273:	
;main.c: 380: SybolT_1= 1;
	clrf	(_SybolT_1)
	bsf	status,0
	rlf	(_SybolT_1),f
	line	381

Re: Pic16f887 компиляция Си кода

Добавлено: Пн мар 31, 2014 09:56:46
Аlex
Где Вы увидели оптимизацию ? Байт сбрасывается и вдвигается в него бит CARRY. Всё нормально...

Re: Pic16f887 компиляция Си кода

Добавлено: Вт апр 01, 2014 20:28:45
RoboC
SybolT_2= 3; 8 asm инструкций
SybolT_1= 1; 3 asm инструкции

И правда,где тут оптимизация, при прерывании после инструкции clrf (_SybolT_1) я получаю в обработчике прерываний на переменной SybolT_1 "0", вместо "1" :) . Причем, компилятор обрабатывает так только единицу - экономит машинные слова :wink: .

Re: Pic16f887 компиляция Си кода

Добавлено: Ср апр 02, 2014 09:49:41
Аlex
при прерывании после инструкции clrf (_SybolT_1) я получаю в обработчике прерываний на переменной SybolT_1 "0", вместо "1"
А фраза "Атомарный доступ" Вам ни о чём не говорит ? :)