Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Продукция MICROCHIP

Продукция MICROCHIP Технические вопросы по всей продукции Microchip

Ответ
 
Опции темы Опции просмотра
Старый 07.05.2007, 11:01   #1
crokus
Junior Member
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщений: 9
Вес репутации: 100/0
crokus will become famous soon enoughcrokus will become famous soon enough
По умолчанию Хочу перейти с Asm на Cи для PIC18

Много лет писал на Asm вначале для PIC16, теперь для PIC18 критична было всегда работа программы в реальном времени. Но сейчас возникает много задач, в которых приходится выполнять сложный анализ многих переменных и событий. Пора переходить на Си, попробовал MCC18 v3.11 Student Edition. Посмотрел какой получается исполняемый код- сердце кровью обливается. С таким кодом ничего не успеет программа сделать. Может посоветуете какой программой лучше писать на Си, чтобы получался хороший оптимальный код. И главное чтобы эта программа работала с ICD2.Спасибо!
crokus вне форума   Ответить с цитированием
Старый 07.05.2007, 11:58   #2
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 7,017
Вес репутации: 6060/179
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

Цитата:
Сообщение от crokus Посмотреть сообщение
Пора переходить на Си, попробовал MCC18 v3.11 Student Edition. Посмотрел какой получается исполняемый код- сердце кровью обливается. С таким кодом ничего не успеет программа сделать. Может посоветуете какой программой лучше писать на Си, чтобы получался хороший оптимальный код. И главное чтобы эта программа работала с ICD2.Спасибо!
начинать писать всё-таки лучше на хайтеке www.htsoft.com (Там всё попроще именно если начать). Но ваша проблема "исполняемого кода" - это, подозреваю, именно ваша проблема.
Можете прям привести какие-то куски (где "обливается"), чтобы провести разбор полётов. Больше конкретики.
Greg вне форума   Ответить с цитированием
Старый 07.05.2007, 19:46   #3
crokus
Junior Member
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщений: 9
Вес репутации: 100/0
crokus will become famous soon enoughcrokus will become famous soon enough
Thumbs up Re: Хочу перейти с Asm на Cи для PIC18

Может быть и моя проблема. Вот пример:
void checkcall(void)
{
unsigned char p;
p=PARAM1-7;
p*=12;
PARAM1++;
if (p>PARAM1) PARAM1=3;
}
Смотрим в кодах:
MCC18 v3.11
1: void checkcall(void)
0202 CFD9 MOVFF 0xfd9, 0xfe6
0204 FFE6 NOP
0206 CFE1 MOVFF 0xfe1, 0xfd9
0208 FFD9 NOP
020A 52E6 MOVF 0xfe6, F, ACCESS
2: {
3: unsigned char p;
4: p=PARAM1-7;
020C 0E07 MOVLW 0x7
020E 5C00 SUBWF 0, W, ACCESS
0210 6EE6 MOVWF 0xfe6, ACCESS
0212 CFD9 MOVFF 0xfd9, 0xfe9
0214 FFE9 NOP
0216 CFDA MOVFF 0xfda, 0xfea
0218 FFEA NOP
021A 52E5 MOVF 0xfe5, F, ACCESS
021C 50E7 MOVF 0xfe7, W, ACCESS
021E 6EEF MOVWF 0xfef, ACCESS
5: p*=12;
0220 0E0C MOVLW 0xc
0222 6E01 MOVWF 0x1, ACCESS
0224 CFD9 MOVFF 0xfd9, 0xfe9
0226 FFE9 NOP
0228 CFDA MOVFF 0xfda, 0xfea
022A FFEA NOP
022C 5001 MOVF 0x1, W, ACCESS
022E 02EF MULWF 0xfef, ACCESS
0230 CFF3 MOVFF 0xff3, 0xfef
0232 FFEF NOP
6: PARAM1++;
0234 2A00 INCF 0, F, ACCESS
7: if (p>PARAM1) PARAM1=3;
0236 CFD9 MOVFF 0xfd9, 0xfe9
0238 FFE9 NOP
023A CFDA MOVFF 0xfda, 0xfea
023C FFEA NOP
023E CFEF MOVFF 0xfef, 0x1
0240 F001 NOP
0242 5000 MOVF 0, W, ACCESS
0244 80D8 BSF 0xfd8, 0, ACCESS
0246 5401 SUBFWB 0x1, W, ACCESS
0248 E202 BC 0x24e
024A 0E03 MOVLW 0x3
024C 6E00 MOVWF 0, ACCESS
8: }
024E 52E5 MOVF 0xfe5, F, ACCESS
0250 52E5 MOVF 0xfe5, F, ACCESS
0252 CFE7 MOVFF 0xfe7, 0xfd9
0254 FFD9 NOP
0256 0012 RETURN 0

==================================

А вот это уже PICC-18 v9.50
Это уже на что-то похоже

1: void checkcall(void)
2: {
0048 FFFF NOP
3: unsigned char p;
4: p=PARAM1-7;
004A 5000 MOVF 0, W, ACCESS
004C 0FF9 ADDLW 0xf9
004E 6ED9 MOVWF 0xfd9, ACCESS
5: p*=12;
0050 0E0C MOVLW 0xc
0052 02D9 MULWF 0xfd9, ACCESS
0054 50F3 MOVF 0xff3, W, ACCESS
0056 6ED9 MOVWF 0xfd9, ACCESS
6: PARAM1++;
0058 2A00 INCF 0, F, ACCESS
7: if (p>PARAM1) PARAM1=3;
005A 50D9 MOVF 0xfd9, W, ACCESS
005C 6000 CPFSLT 0, ACCESS
005E D002 BRA 0x64
0060 0E03 MOVLW 0x3
0062 6E00 MOVWF 0, ACCESS
8: }
0064 0012 RETURN 0

================================
На ASM у меня получается:
00076A 0E07 00039 movlw .7
00076C 5D5E 00040 subwf PARAM1,W
00076E 0D0C 00041 mullw .12
000770 CFF3 F023 00042 movff PRODL,p
000774 3F5E 00043 incfsz PARAM1,F
000776 515E 00044 movf PARAM1,W
000778 6023 00045 cpfslt p
00077A D002 00046 bra lab1
00077C 0E03 00047 movlw .3
00077E 6F5E 00048 movwf PARAM1
000780 00049 lab1
000780 0012 00050 return 0

===================================
Когда я писал первое обращение у меня не было пробы с PICC-18 v9.50. Теперь вижу что результат довольно хороший . Так что буду на нем тренироваться. Убивает только на начальном этапе проблемы с размещением кодов в памяти. Хочется по-своему, а компилятор делает все по-своему, вот и изучаю сейчас команды не самого языка, а транслятора и линкера
crokus вне форума   Ответить с цитированием
Старый 07.05.2007, 20:47   #4
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 7,017
Вес репутации: 6060/179
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

Цитата:
Сообщение от crokus Посмотреть сообщение
Может быть и моя проблема. Вот пример:
void checkcall(void)
{
unsigned char p;
p=PARAM1-7;
p*=12;
PARAM1++;
if (p>PARAM1) PARAM1=3;
}

А вот это уже PICC-18 v9.50
Это уже на что-то похоже

1: void checkcall(void)
2: {
0048 FFFF NOP
3: unsigned char p;
4: p=PARAM1-7;
004A 5000 MOVF 0, W, ACCESS
004C 0FF9 ADDLW 0xf9
004E 6ED9 MOVWF 0xfd9, ACCESS
5: p*=12;
0050 0E0C MOVLW 0xc
0052 02D9 MULWF 0xfd9, ACCESS
0054 50F3 MOVF 0xff3, W, ACCESS
0056 6ED9 MOVWF 0xfd9, ACCESS
6: PARAM1++;
0058 2A00 INCF 0, F, ACCESS
7: if (p>PARAM1) PARAM1=3;
005A 50D9 MOVF 0xfd9, W, ACCESS
005C 6000 CPFSLT 0, ACCESS
005E D002 BRA 0x64
0060 0E03 MOVLW 0x3
0062 6E00 MOVWF 0, ACCESS
8: }
0064 0012 RETURN 0

================================
На ASM у меня получается:
00076A 0E07 00039 movlw .7
00076C 5D5E 00040 subwf PARAM1,W
00076E 0D0C 00041 mullw .12
000770 CFF3 F023 00042 movff PRODL,p
000774 3F5E 00043 incfsz PARAM1,F
000776 515E 00044 movf PARAM1,W
000778 6023 00045 cpfslt p
00077A D002 00046 bra lab1
00077C 0E03 00047 movlw .3
00077E 6F5E 00048 movwf PARAM1
000780 00049 lab1
000780 0012 00050 return 0

===================================
Когда я писал первое обращение у меня не было пробы с PICC-18 v9.50. Теперь вижу что результат довольно хороший . Так что буду на нем тренироваться. Убивает только на начальном этапе проблемы с размещением кодов в памяти. Хочется по-своему, а компилятор делает все по-своему, вот и изучаю сейчас команды не самого языка, а транслятора и линкера

и у вас не одинаковый код

На ASM у меня получается:
00076A 0E07 00039 movlw .7
00076C 5D5E 00040 subwf PARAM1,W
00076E 0D0C 00041 mullw .12


так надо было сразу и писать
Код:
p = (PARAM1-7) * 12;
у вас на Си лишнее сохранение p=PARAM1-7;


а зачем что-то специально размещать в памяти? какие причины? bootloader, хитрая защита каких-то областей?
Greg вне форума   Ответить с цитированием
Старый 07.05.2007, 22:02   #5
VXDRV
Senior Member
 
Аватар для VXDRV
 
Регистрация: 25.02.2007
Адрес: Karagandy
Возраст: 37
Сообщений: 375
Вес репутации: 230/54
VXDRV has a spectacular aura aboutVXDRV has a spectacular aura aboutVXDRV has a spectacular aura about
Отправить сообщение для VXDRV с помощью ICQ
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

Цитата:
Сообщение от Greg Посмотреть сообщение
а зачем что-то специально размещать в памяти? какие причины? bootloader, хитрая защита каких-то областей?
Бывает что табличку зашить какую-нибудь надо в код типа "синуса" или знакогенератора.
VXDRV вне форума   Ответить с цитированием
Старый 07.05.2007, 23:12   #6
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 7,017
Вес репутации: 6060/179
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

Цитата:
Сообщение от VXDRV Посмотреть сообщение
Бывает что табличку зашить какую-нибудь надо в код типа "синуса" или знакогенератора.
а зачем для этого абсолютные адреса?
зашиваешь как
Код:
const unsigned int cuiSINUS[]={123,12234,2334,23,23,23,2434.........
};
(тупо так)
потом обращаешься как
Код:
int i;
int isinus;

isinus = cuiSINUS[i++];
и т.д.

а иначе такой вот бред и случается
http://caxapa.ru/86670.html
(я так и не понял суть того ответа)
Greg вне форума   Ответить с цитированием
Старый 07.05.2007, 23:32   #7
DL36
Senior Member
 
Регистрация: 25.02.2007
Адрес: Херсон
Сообщений: 3,642
Вес репутации: 1983/104
DL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant futureDL36 has a brilliant future
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

Цитата:
Сообщение от Greg Посмотреть сообщение

а иначе такой вот бред и случается
http://caxapa.ru/86670.html
(я так и не понял суть того ответа)
Я понял так, применять константы, вычисляемый переход можно только в пределах одной страницы памяти программ для пик16.

Последний раз редактировалось DL36; 08.05.2007 в 14:40. Причина: Уточнение
DL36 вне форума   Ответить с цитированием
Старый 08.05.2007, 09:08   #8
crokus
Junior Member
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщений: 9
Вес репутации: 100/0
crokus will become famous soon enoughcrokus will become famous soon enough
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

По поводу абсолютных адресов.
Задачи бывают совершенно разные:у меня это действительно Loader,который размещается с 0 до 0x1ff. И этот вариант абсолютно надежен при перешивке программы, он ничего не боится и экспериментировать с другими не хочется.Такой вариант работает у меня в сотне разных систем и переход на новый язык должен сохранять такой подход иначе я не смогу обслуживать новые и старые системы. Это различные константы, одни из которых не должны меняться при update моей программы, а другие должны меняться. Мне придется заново продумывать и отлаживать идеологию своих программ. Да и многое другое.
Пример который я привел в начале показал, что при одном и том же варианте СИ программы, коды от двух компиляторов получаются совершенно разные.
А теперь по поводу PICC-18. Поработал на нем только один день. Что сразу не устраивает:1)у него свой ASM и если я собирался использовать уже готовые куски кода на ASM MIcrochip, то его придется адаптировать под этот-лишняя работа. 2) У него своя жестко заданная структура прерываний,которую я никак не могу связать со своим Loader -значит все прерывания придется писать на ASM.И как-то туго в него врубаюсь. Если для MCC18 достаточно было 2 дня, имея подробный Manual, уже делать то что хочется,то для PICC-18 за день ни на шаг не сдвинулся-погряз в ключах и опциях.
Еще раз обращаюсь с просьбой к тем, кто работает на MCC18.
1. Я предполагаю, что такой "плохой" вариант трансляции у меня связан с тем, что у меня сейчас демо версия, поэтому она так и транслирует. Если можете дайте кто-нибудь serial для MCC18 v3.11 или v3.02 .
2. Если не трудно посмотрите у себя , как у вас транслируется такой кусок:
void checkcall(void)
{
unsigned char p;
p=PARAM1-7;
p*=12;
PARAM1++;
if (p>PARAM1) PARAM1=3;
}
crokus вне форума   Ответить с цитированием
Старый 08.05.2007, 10:34   #9
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 39
Сообщений: 1,383
Вес репутации: 1267/74
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

Цитата:
Сообщение от crokus Посмотреть сообщение
Может быть ...
http://www.microchip.su/showthread.p...default+static

Вот здесь про mplab C18 нечто подобное разбиралось!
2AplusA вне форума   Ответить с цитированием
Старый 08.05.2007, 10:49   #10
Alex B.
Super Moderator
 
Аватар для Alex B.
 
Регистрация: 25.02.2007
Адрес: Russia, SPb
Сообщений: 1,674
Вес репутации: 1729/82
Alex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant futureAlex B. has a brilliant future
Отправить сообщение для Alex B. с помощью Skype™
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

>> А теперь по поводу PICC-18

>> у него свой ASM и если я собирался использовать уже готовые
>> куски кода на ASM MIcrochip, то его придется адаптировать под
>> этот-лишняя работа

какой адаптировать? выж на си собираетесь писать. Забудьте в этом случае про асм, он действительно нужен будет ооооочень редко - например, для инкремента свободнобегущего 16-битного таймера - но это пять строк в коде.

>> У него своя жестко заданная структура прерываний,которую я
>> никак не могу связать со своим Loader -значит все прерывания
>> придется писать на ASM

вот тут попродробнее - что не срослось?

>> то для PICC-18 за день ни на шаг не сдвинулся-погряз
>> в ключах и опциях.

как правило большинство этим вообще не пользуются, компилится по умолчанию с ключами, которые предлагает dll для MPLAB.

У вас ситуация несколько иная - хочется использовать парадигму предыдущих асмовых проектов. В этом случае без разницы какой компилер использовать - все равно наткнетесь на некоторые проблемы. MCC18 действительно более дружелюбен (ИМХО) к юзеру, но и код у него рыхлее и медленнее (впрочем об этом через год забудете, будете писать _алгоритм_ а не вылизывать асмовый листинг, который вряд-ли кроме вас кто увидит). MCC18 так же использует расширенный набор инструкций и только с ним можно использовать вытесняющие RTOS. hi-tech до сих пор не научился, да и ладно.

в общем чтобы выбрать, стоит писать портируемый код, который будет компилиться и тем и тем, а потом посмотреть на результат. Решать все равно придется самому, так как по MCC18 мало кто вас тут просветит - в основно все hi-tech используют (в том числе я =))
Alex B. вне форума   Ответить с цитированием
Старый 08.05.2007, 12:53   #11
crokus
Junior Member
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщений: 9
Вес репутации: 100/0
crokus will become famous soon enoughcrokus will become famous soon enough
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

Спасибо Alex B! От Вас я услышал то, что хотел-выбор все-таки за hi-tech. А вылизывание ASMкода для меня не сама цель, а понимание, что при не оптимальном коде программа будет работать медленнее, значит это нужно учитывать при обработке внешних событий( тех которые не по прерыванию, а по опросу).
crokus вне форума   Ответить с цитированием
Старый 10.05.2007, 11:30   #12
timday
Senior Member
 
Регистрация: 07.03.2007
Адрес: Саратов
Возраст: 40
Сообщений: 385
Вес репутации: 308/55
timday is a jewel in the roughtimday is a jewel in the roughtimday is a jewel in the roughtimday is a jewel in the rough
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

Да, и кстати, студент эдишн не оптимизирует код. Может еще поэтому получается такая громоздкая программа.
timday вне форума   Ответить с цитированием
Старый 11.05.2007, 15:01   #13
GEN++
Junior Member
 
Регистрация: 25.02.2007
Сообщений: 19
Вес репутации: 102/50
GEN++ will become famous soon enoughGEN++ will become famous soon enough
По умолчанию Re: Хочу перейти с Asm на Cи для PIC18

>crokus
Мне приходилось писать управляющие программы с самопальным
Loader-ом сначала на "H-T" а потом на MCC18.
На MCC18 - нет проблем с укладкой кода, переменных и констант по
нужным адресам и блокированием использования компилятором
областей RAM. Можно посмотреть здесь:
http://www.fractal.com.ru/index.php?...x&sp=p_c&ssp=c
Удачи.
GEN++ вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, найти ошибку в коде Катя Микроконтроллеры других производителей 26 08.12.2007 14:58
"Шапочку" бы на ASM... Для 18f4220 камушка Синклер Продукция MICROCHIP 3 29.10.2007 16:27
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00
Одинаковая цена на PIC18, PIC24, dsPIC33 (?как так?) Picozoid Продукция MICROCHIP 25 21.08.2007 15:57
USART для PIC16F877 и PIC16F628A на Ассемблере vrup Продукция MICROCHIP 1 19.04.2007 12:45


Часовой пояс GMT +3, время: 20:03.


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