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

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

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

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

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

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


 
Опции темы

Знатокам Keil C51

Непрочитано 24.06.2015, 17:20  
Kabron
Почётный гражданин KAZUS.RUN
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,833
Сказал спасибо: 721
Сказали Спасибо 4,535 раз(а) в 2,070 сообщении(ях)
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% скорости.

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

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

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

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

Оформить ассемблерной вставкой... Тоже мне проблема
niXto вне форума  
Непрочитано 24.06.2015, 19:08  
Kabron
Почётный гражданин KAZUS.RUN
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,833
Сказал спасибо: 721
Сказали Спасибо 4,535 раз(а) в 2,070 сообщении(ях)
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
}
Но осадочек...
__________________
33Й ДАН БАНА
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.

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

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

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

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

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

Последний раз редактировалось Kabron; 24.06.2015 в 19:37.
Kabron вне форума  
Непрочитано 24.06.2015, 19:34  
Boba_spb
Почётный гражданин KAZUS.RUN
 
Регистрация: 08.06.2008
Сообщений: 1,393
Сказал спасибо: 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.RUN
 
Аватар для Kabron
 
Регистрация: 12.11.2004
Адрес: Москва
Сообщений: 8,833
Сказал спасибо: 721
Сказали Спасибо 4,535 раз(а) в 2,070 сообщении(ях)
Kabron на пути к лучшему
По умолчанию Re: ? Знатокам Keil C51 ?

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

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

В общем, пришлось сделать отдельный asm.с с этой функцией, ибо включение asm в файл с драйвером, безбожно портит отладку, т.к. теперь шагание идет только асмовом файле src по ассемблерному коду.
__________________
33Й ДАН БАНА
Я не помогаю. Я провоцирую думать.
Не дай вам Бог плохих контактов.
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


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.