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

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

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

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

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

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


 
Опции темы
Непрочитано 02.06.2019, 12:09  
Dtolok
Гражданин KAZUS.RU
 
Регистрация: 28.11.2007
Адрес: харьков
Сообщений: 840
Сказал спасибо: 332
Сказали Спасибо 43 раз(а) в 23 сообщении(ях)
Dtolok на пути к лучшему
По умолчанию Перевод из asm в С

использую для своих нужд программу микрочипа по управлению асинхронного двигателя AN955 но возникла необходимость немного ее модифицировать - пришла в голову идея использовать ее совместно с "С" . однако не тут то было - то что нормально функционирует в Х16 - не работает в Х8 - а именно совместное использование файлов асм и С. пытался как то переписать на С всю программу - результат плачевный ! в ступор вводит меня кусок кода - MOVFF PRODH,PARAMETER_BUFFER+LOC_REQD_SPEED_HZ - последние 2 параметра определены как константы .... кто подскажет как соединить не соединяемое???
Реклама:
Dtolok вне форума  
Непрочитано 02.06.2019, 13:05  
DmitriyVDN
Вид на жительство
 
Регистрация: 10.06.2010
Сообщений: 432
Сказал спасибо: 171
Сказали Спасибо 154 раз(а) в 103 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: Перевод из acm в С

PRODH - адрес регистра(название переменной) откуда производится запись
PARAMETER_BUFFER - адрес начала массива в ОЗУ
LOC_REQD_SPEED_HZ - смещение адреса (номер элемента массива)
на Си:
PARAMETER_BUFFER[LOC_REQD_SPEED_HZ]=PRODH
или структура
PARAMETER_BUFFER - адрес начала структуры или название структуры в ОЗУ
LOC_REQD_SPEED_HZ - смещение адреса в структуре (название переменной в структуре)
на Си:
PARAMETER_BUFFER.LOC_REQD_SPEED_HZ=PRODH - если PARAMETER_BUFFER название структуры
PARAMETER_BUFFER-›LOC_REQD_SPEED_HZ=PRODH - если PARAMETER_BUFFER адрес структуры

Последний раз редактировалось DmitriyVDN; 02.06.2019 в 13:22.
DmitriyVDN вне форума  
Сказали "Спасибо" DmitriyVDN
Dtolok (02.06.2019)
Непрочитано 02.06.2019, 13:16  
Dtolok
Гражданин KAZUS.RU
 
Регистрация: 28.11.2007
Адрес: харьков
Сообщений: 840
Сказал спасибо: 332
Сказали Спасибо 43 раз(а) в 23 сообщении(ях)
Dtolok на пути к лучшему
По умолчанию Re: Перевод из acm в С

MOVFF fs, fd Пересылка из fs в fd
извините а может быть вот так?
PARAMETER_BUFFER[LOC_REQD_SPEED_HZ] = PRODH;
Dtolok вне форума  
Непрочитано 02.06.2019, 13:22  
DmitriyVDN
Вид на жительство
 
Регистрация: 10.06.2010
Сообщений: 432
Сказал спасибо: 171
Сказали Спасибо 154 раз(а) в 103 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: Перевод из acm в С

Сообщение от Dtolok Посмотреть сообщение
PARAMETER_BUFFER[LOC_REQD_SPEED_HZ] = PRODH;
да именно так , пост исправил и дополнил
DmitriyVDN вне форума  
Сказали "Спасибо" DmitriyVDN
Dtolok (02.06.2019)
Непрочитано 02.06.2019, 13:40  
Dtolok
Гражданин KAZUS.RU
 
Регистрация: 28.11.2007
Адрес: харьков
Сообщений: 840
Сказал спасибо: 332
Сказали Спасибо 43 раз(а) в 23 сообщении(ях)
Dtolok на пути к лучшему
По умолчанию Re: Перевод из acm в С

в программе указано как
#DEFINE PARAMETER_BUFFER_SIZE 0X35 ;SYSTEM PARAMETER BUFFER SIZE


это буфер размером с 0х35 и смещение будет 0х2С

значит надо в С указать буфер с таким же размером
char PARAMETER_BUFFER_SIZE [0X35];
а #DEFINE LOC_REQD_SPEED_HZ 0X2C так и оставляем?
Dtolok вне форума  
Непрочитано 02.06.2019, 14:17  
DmitriyVDN
Вид на жительство
 
Регистрация: 10.06.2010
Сообщений: 432
Сказал спасибо: 171
Сказали Спасибо 154 раз(а) в 103 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию

нет.
так и пишем:
#DEFINE PARAMETER_BUFFER_SIZE 0X35
#DEFINE LOC_REQD_SPEED_HZ 0X2C
создаем масив
char PARAMETER_BUFFER [ PARAMETER_BUFFER_SIZE];

обращаемся к 0х2с элементу массива
х=PARAMETER_BUFFER[LOC_REQD_SPEED_HZ]

бегло просмотрел код, использование PARAMETER_BUFFER_SIZE и обращение к элементам буфера в цикле не увидел, может не доглядел. поэтому буфер лучше оформить в виде структуры
Код:
struct TYPE_BUFFER
{
  char LOC_BUFFER_CHKSUM_1;
  char LOC_BUFFER_CHKSUM_2;
  char LOC_MOTOR_VOLTAGE_LSB;
  char LOC_MOTOR_CURRENT;
//......
//......
  char LOC_REQD_SPEED_HZ;
  char LOC_UPDATE_STEP_LSB;
//.......
//.......
  char LOC_FUTURE_USE_4;
  char LOC_FUTURE_USE_5;
}PARAMETER_BUFFER;
и обращаться
x= PARAMETER_BUFFER.LOC_REQD_SPEED_HZ
это будет правильней.

Последний раз редактировалось mike-y-k; 02.06.2019 в 19:08.
DmitriyVDN вне форума  
Сказали "Спасибо" DmitriyVDN
Dtolok (02.06.2019)
Непрочитано 02.06.2019, 17:47  
Dtolok
Гражданин KAZUS.RU
 
Регистрация: 28.11.2007
Адрес: харьков
Сообщений: 840
Сказал спасибо: 332
Сказали Спасибо 43 раз(а) в 23 сообщении(ях)
Dtolok на пути к лучшему
По умолчанию

никак не соображу с этой записью :
LFSR FSR0,PARAMETER_BUFFER ;LOAD PARAMETER_BUFFER BASE ADDRESS

при том что:
PARAMETER_BUFFER RES PARAMETER_BUFFER_SIZE ;PARAMETER BUFFER

вот весь кусок
Код:
READ_SYSTEM_PARAMETERS
    LFSR	FSR0,PARAMETER_BUFFER		;LOAD PARAMETER_BUFFER BASE ADDRESS
    MOVLW	SYSTEM_PARAMETER_COUNT
    MOVWF	TEMP5				;LOAD SYSTEM PARAMETERS COUNT
    BCF	EECON1,CFGS			;ACCESS FLASH/EEPROM MEMORY
    BCF	EECON1,EEPGD			;ACCESS EEPROM MEMORY
    CLRF	EEADR				;POINT TO FIRST DATA TO BE READ
NEXT_READ
    BSF	EECON1,RD			;ENABLE READ
    MOVFF	EEDATA,POSTINC0
    INCF	EEADR				;POINT TO NEXT DATA TO BE READ
    DECFSZ	TEMP5,F				;ALL DATA READ COMPLETE?
    BRA	NEXT_READ			;NO - READ NEXT DATA
    RETURN					;YES - ALL READ OVER. RETURN TO MAIN
собственно из него следует что идет чтение из еепром по адресу FSR0 в буфер PARAMETER_BUFFER ? или я что то путаю?

Код:
void READ_SYSTEM_PARAMETERS(void) { 
    EECON1bits.CFGS = 0;            //ACCESS FLASH/EEPROM MEMORY
    EECON1bits.EEPGD = 0;           //ACCESS EEPROM MEMORY
    EEADR = 0x00;                   //POINT TO FIRST DATA TO BE READ
    for (TEMP5 == 0; TEMP5 ‹= SYSTEM_PARAMETER_COUNT ; TEMP5++) {
        EECON1bits.RD = 1; //ENABLE READ
        PARAMETER_BUFFER[TEMP5] = EEDATA;
        EEADR++; //POINT TO NEXT DATA TO BE READ
    }
}

Последний раз редактировалось mike-y-k; 02.06.2019 в 19:09.
Dtolok вне форума  
Непрочитано 02.06.2019, 19:14  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 8,741
Сказал спасибо: 8,815
Сказали Спасибо 2,897 раз(а) в 2,201 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Перевод из asm в С

Dtolok, попробуйте поиском. В прошлом веке на эту тему были программы конвертации и даже с настройкой под систему команд конкретного процессора с возможностями его ассемблера.
Но ручной работы на полученном было немало.
Очень помогает листинг ассемблера после компиляции для анализа…

Самым продуктивным будет путь с выделением из кода на asm алгоритма и его реализация на C.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при малом числе вариантов…
mike-y-k вне форума  
Сказали "Спасибо" mike-y-k
Dtolok (02.06.2019)
Непрочитано 02.06.2019, 19:52  
DmitriyVDN
Вид на жительство
 
Регистрация: 10.06.2010
Сообщений: 432
Сказал спасибо: 171
Сказали Спасибо 154 раз(а) в 103 сообщении(ях)
DmitriyVDN на пути к лучшему
По умолчанию Re: Перевод из asm в С

Сообщение от Dtolok Посмотреть сообщение
собственно из него следует что идет чтение из еепром по адресу FSR0 в буфер PARAMETER_BUFFER ? или я что то путаю?
таки да , не путаете.
но что-то на Си вы намудрили...по моему это выглядит так:
Код:
void READ_SYSTEM_PARAMETERS(void) {
char TEMP5 = SYSTEM_PARAMETER_COUNT;
while(TEMP5--)
  { 
    PARAMETER_BUFFER[TEMP5]=EEPROM_READ(TEMP5);
  }
}
DmitriyVDN вне форума  
Сказали "Спасибо" DmitriyVDN
Dtolok (02.06.2019)
Непрочитано 02.06.2019, 20:16  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 8,741
Сказал спасибо: 8,815
Сказали Спасибо 2,897 раз(а) в 2,201 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Перевод из asm в С

Dtolok, вдогонку
Наоборот (C-›asm) таки совсем без проблем - этого не обойти никак , а вот наоборот в общем случае только через реализацию алгоритма получится.
Анализ полученного из C машинного кода сильно поможет в понимании работы компилятора и представлении конструкций C в машинных командах. Заодно стоит посмотреть на работу опций компилятора для оптимизации. При написании эффективного кода на C, поиске ошибок и отладке впоследствии очень поможет…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при малом числе вариантов…
mike-y-k вне форума  
Сказали "Спасибо" mike-y-k
Dtolok (02.06.2019)
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги (не радиотехнической тематики) Mike79 Делимся опытом 4261 24.11.2021 21:14
Linux-ваше мнение Tvenn Делимся опытом 6169 23.08.2015 08:57
Книги (Художественная литература) Mike79 Делимся опытом 40 29.11.2014 13:29
HEX из ASM файла, как? ludovikIV Цифровые сигнальные процессоры 1 31.10.2008 19:27
I2C, WinAVR и at90s2313 Hoksmur Микроконтроллеры, АЦП, память и т.д 22 04.09.2007 01:14


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


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