Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 24.06.2015, 17:20  
Kabron
Почётный гражданин KAZUS.RU
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,475
Сказал спасибо: 693
Сказали Спасибо 4,261 раз(а) в 1,955 сообщении(ях)
Kabron на пути к лучшему
По умолчанию Знатокам Keil C51

Перевожу проект на другой LCD. Для этого создал второй проект - копию исходного, в котором и правлю.
Имею.
Абсолютно одинаковый код софтового SPI транслируется в разный ассемблерный.
Код:
//lS020:
void SendData(WORD wrd){
	BYTE i;
	Cs = 0;
	for (i = 16; i › 0; i--)	
	{
		Dat = wrd & 0x8000;		
		Clk = 0;
		Clk = 1;
		wrd = wrd‹‹1;		
	} 
	Cs = 1;
}
 
   47: void SendData(WORD wrd){ 
    48:         BYTE i; 
    49:         Cs = 0; 
C:0x3A7B    C2A2     CLR      PC2(0xA0.2)
    51:         for (i = 16; i › 0; i--)         
C:0x3A7D    7D10     MOV      R5,#0x10
    52:         { 
    53:                 Dat = wrd & 0x8000;           
C:0x3A7F    EE        MOV      A,R6
C:0x3A80    33         RLC      A
C:0x3A81    92A4     MOV      PC4(0xA0.4),C
    54:                 Clk = 0; 
C:0x3A83    C2A3     CLR      PC3(0xA0.3)
    55:                 Clk = 1; 
C:0x3A85    D2A3     SETB     PC3(0xA0.3)
    56:                 wrd = wrd‹‹1;       
C:0x3A87    EF         MOV      A,R7
C:0x3A88    25E0     ADD      A,ACC(0xE0)
C:0x3A8A    FF         MOV      R7,A
C:0x3A8B    EE        MOV      A,R6
C:0x3A8C    33         RLC      A
C:0x3A8D    FE        MOV      R6,A
    57:         }  
C:0x3A8E    DDEF   DJNZ     R5,C:3A7F
    58:         Cs = 1; 
C:0x3A90    D2A2     SETB     PC2(0xA0.2)
    59: } 
C:0x3A92    22       RET
Другой дисплей
Код:
//ILI9341:
void TFT_SendData(WORD wrd){
	BYTE i;
	Rs = 1;
	for (i = 16; i › 0; i--)	
	{
		Dat = wrd & 0x8000;		
		Clk = 0;
		Clk = 1;
		wrd = wrd‹‹1;		
	} 
}

    55: void TFT_SendData(WORD wrd){ 
    56:         BYTE i; 
    57:         Rs = 1; 
C:0x3AB5    D284     SETB     PA4(0x80.4)
    58:         for (i = 16; i › 0; i--)         
C:0x3AB7    7D10     MOV      R5,#0x10
    59:         { 
    60:                 Dat = wrd & 0x8000;           
C:0x3AB9    EE        MOV      A,R6
    61:                 Clk = 0; 
    62:                 Clk = 1; 
    63:                 wrd = wrd‹‹1;       
C:0x3ABA  123578   LCALL    L?0081(C:3578)
C:0x3ABD    EE       MOV      A,R6
C:0x3ABE    33       RLC      A
C:0x3ABF    FE       MOV      R6,A
    64:         }  
C:0x3AC0    DDF7     DJNZ     R5,C:3AB9
    66: } 
C:0x3AC2    22       RET      

C:0x3578    33       RLC      A
C:0x3579    9285     MOV      PA5(0x80.5),C
C:0x357B    C286     CLR      PA6(0x80.6)
C:0x357D    D286     SETB     PA6(0x80.6)
C:0x357F    EF       MOV      A,R7
C:0x3580    25E0     ADD      A,ACC(0xE0)
C:0x3582    FF       MOV      R7,A
C:0x3583    22       RET
Непонятно с какого перепугу, компилятор во втором случае решил оформить ногодрыг и сдвиг переменной
Код:
		Clk = 0;
		Clk = 1;
		wrd = wrd‹‹1;
в виде отдельной подпрограммы. И как его убедить действовать по первому образцу, т.к. операция очень время-критичная и я теряю на этом 30% скорости.

Настройки проектов абсолютно одинаковы.
Реклама:
__________________
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.

Последний раз редактировалось Kabron; 24.06.2015 в 17:45.
Kabron на форуме  
Непрочитано 24.06.2015, 18:13  
baiderin
Почётный гражданин KAZUS.RU
 
Аватар для baiderin
 
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,726
Сказал спасибо: 2,410
Сказали Спасибо 894 раз(а) в 581 сообщении(ях)
baiderin на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

А,если поменять местами исходные файлы ?
baiderin вне форума  
Непрочитано 24.06.2015, 18:32  
pambaru
Почётный гражданин KAZUS.RU
 
Регистрация: 24.03.2007
Сообщений: 1,329
Сказал спасибо: 85
Сказали Спасибо 595 раз(а) в 361 сообщении(ях)
pambaru на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

Сообщение от Kabron Посмотреть сообщение
Непонятно с какого перепугу, компилятор во втором случае решил оформить ногодрыг и сдвиг переменной
в виде отдельной подпрограммы.
Оптимизатор, видимо, сработал.
Cs и Rs все же разные в обоих случаях, на разных портах, в разные состояния приводятся, вот и код разный.
С полность отключенной оптимизацией (уровень 0) код, скорее всего, должен стать похожим.
pambaru вне форума  
Непрочитано 24.06.2015, 18:58  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

Оформить ассемблерной вставкой... Тоже мне проблема
niXto вне форума  
Непрочитано 24.06.2015, 19:08  
Kabron
Почётный гражданин KAZUS.RU
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,475
Сказал спасибо: 693
Сказали Спасибо 4,261 раз(а) в 1,955 сообщении(ях)
Kabron на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

Сообщение от niXto Посмотреть сообщение
Оформить ассемблерной вставкой... Тоже мне проблема
Как раз не проблема, но:
1. хочется понять глюк С какого такого перепугу
2. асмовые вставки требуюn доп настроек компилятора о которых можно потом забыть
3. Да и не кошерно как то
Вот так работает на нужной скорости:
Код:
void TFT_SendData(WORD wrd){
	Rs=1;
#pragma asm
			MOV      R5, #0x10	; for (i = 16; i › 0; i--){ 
         Loop: 	        MOV      A,R6
			RLC      A
			MOV      0x80.5, C	; PA5
			CLR      0x80.6		; PA6
			SETB     0x80.6		; PA6
			MOV      A,R7		; wrd = wrd‹‹1;
			ADD      A, ACC		;
			MOV      R7,A
			MOV      A,R6
			RLC      A
			MOV      R6,A
			DJNZ     R5, Loop
			RET
#pragma endasm
}
Но осадочек...
__________________
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.

Последний раз редактировалось Kabron; 24.06.2015 в 19:15.
Kabron на форуме  
Непрочитано 24.06.2015, 19:28  
Kabron
Почётный гражданин KAZUS.RU
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,475
Сказал спасибо: 693
Сказали Спасибо 4,261 раз(а) в 1,955 сообщении(ях)
Kabron на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

Сообщение от baiderin Посмотреть сообщение
А,если поменять местами исходные файлы?
Не помогает, даже хуже
Т.е я не менял именно местами, а добавил в старый проект новый код. Теперь обе функции компилятся с избыточным кодом.
__________________
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.
Kabron на форуме  
Непрочитано 24.06.2015, 19:31  
Kabron
Почётный гражданин KAZUS.RU
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,475
Сказал спасибо: 693
Сказали Спасибо 4,261 раз(а) в 1,955 сообщении(ях)
Kabron на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

Сообщение от pambaru Посмотреть сообщение
Оптимизатор, видимо, сработал.
Cs и Rs все же разные в обоих случаях, на разных портах, в разные состояния приводятся, вот и код разный.
С полность отключенной оптимизацией (уровень 0) код, скорее всего, должен стать похожим
С дефолтной оптимизацией я вылетаю в out of space.

В общем грустно, я был лучшего мнения о Кейле, тем более что в knowledge base, разные гуру, на похожий вопрос пишут, что лучше компайлера ни один прогер асм не сделает.

ЗЫ хорошо хоть не заразно Вернул старый обратно, нормально скомпилилось.
__________________
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.

Последний раз редактировалось Kabron; 24.06.2015 в 19:37.
Kabron на форуме  
Непрочитано 24.06.2015, 19:34  
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

Уж если биться за скорострельность, то надо писать так
PHP код:
#pragma asm
    
MOV      R5#0x8     
    
MOV      A,R6
loop1
:    RLC      A
    MOV      0x80.5
C    PA5
    CLR      0x80.6        
PA6
    SETB     0x80.6        
PA6
    DJNZ     R5
Loop1

    MOV      R5
#0x8     
    
MOV      A,R7
loop2
:    RLC      A
    MOV      0x80.5
C    PA5
    CLR      0x80.6        
PA6
    SETB     0x80.6        
PA6
    DJNZ     R5
Loop2
    RET 
Boba_spb вне форума  
Сказали "Спасибо" Boba_spb
Kabron (24.06.2015)
Непрочитано 24.06.2015, 19:58  
Kabron
Почётный гражданин KAZUS.RU
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,475
Сказал спасибо: 693
Сказали Спасибо 4,261 раз(а) в 1,955 сообщении(ях)
Kabron на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

Boba_spb,
Вау, респект, как сам не додумался прирост в два раза. SPI clock 1.2MHz.
__________________
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.

Последний раз редактировалось Kabron; 24.06.2015 в 20:01.
Kabron на форуме  
Непрочитано 24.06.2015, 20:05  
Kabron
Почётный гражданин KAZUS.RU
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,475
Сказал спасибо: 693
Сказали Спасибо 4,261 раз(а) в 1,955 сообщении(ях)
Kabron на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

В общем, пришлось сделать отдельный asm.с с этой функцией, ибо включение asm в файл с драйвером, безбожно портит отладку, т.к. теперь шагание идет только асмовом файле src по ассемблерному коду.
__________________
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.
Kabron на форуме  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос знатокам Keil sokolav Микроконтроллеры, АЦП, память и т.д 2 05.07.2013 20:35
Keil C51 как изменить адрес загрузки Kabron Микроконтроллеры, АЦП, память и т.д 4 09.10.2009 23:31
Вопрос к знатокам Си от Keil C51. 011119xx Proteus, KiCAD и другие ECAD 1 29.07.2005 00:56
Как в Keil C51 создать hex файл? 011119xx Микроконтроллеры, АЦП, память и т.д 1 13.07.2005 11:59
Помогите начинающему разобраться с Keil C51 Dabrik Делимся опытом 2 05.09.2004 12:32


Часовой пояс GMT +4, время: 19:50.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot