Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[44.222.220.101] |
|
Страницы: (4) [1] 2 3 ... Последняя » все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
привет всем! вот недавно узнал что микроконтроллеры типа PIC прогаю.тся на АССEMBLER кто нибудь занимается такими вешами и можно ли прогать их на C++??
|
Сообщ.
#2
,
|
|
|
Можно на C. Компиляторов C++ для микроконтроллеров я пока не встречал. Но если ты хочешь получить действительно качественный и оптимизированный код, пиши на ассемблере. Компиляторы C под микроконтроллеры генерируют такое количество мусора, что сам не рад будешь.
|
Сообщ.
#3
,
|
|
|
Цитата можно ли прогать их на C++?? да можно Цитата Компиляторы C под микроконтроллеры генерируют такое количество мусора, что сам не рад будешь. я бы не стал делать таких категоричных заявлений |
Сообщ.
#4
,
|
|
|
Цитата potor @ Я бы не делал, если бы не пробовал. Сравните для примера программу сложения 2-х целых (!) чисел под любой 51-й Intel на ассемблере и на C. Тогда всё сразу станет ясно. На то он и микроконтроллер, чтобы пользоваться им оптимально, а не покупать контроллеры с огромными флешками за счёт конечного пользователя. я бы не стал делать таких категоричных заявлений |
Сообщ.
#5
,
|
|
|
Цитата Сравните для примера программу сложения 2-х целых (!) чисел под любой 51-й Intel на ассемблере и на C предлагаю выложить вам свой пример на ассемблере сюда, а после я выложу оттранслированный с С код и посмотрим у кого получится короче |
Сообщ.
#6
,
|
|
|
Цитата EL[michlen] @ Ну так выкладывайте сравнение. Свои исходники на ассемблере и C, на которых выполнялось сравнение. Посмотрим. Сравните для примера программу сложения 2-х целых (!) чисел под любой 51-й Intel на ассемблере и на C Хотя у меня уже есть подозрение, с чем связаны такие выводы. |
Сообщ.
#7
,
|
|
|
Цитата Ну так выкладывайте сравнение. Свои исходники на ассемблере и C, на которых выполнялось сравнение. Посмотрим. я готов хоть сейчас, но для начала жду от EL[michlen] его версию Добавлено давайте сразу уточним задачу надо написать на ассемблере MCS51 функцию, которая принимает на входе 2 16-разрядных беззнаковых целых числа и выдает на выходе их сумму ввиде беззнакового целого 16-разрядного числа |
Сообщ.
#8
,
|
|
|
Цитата potor @ Мне хотелось бы увидеть сравнение именно от EL[michlen]. Т.е. как, что и на чем он сравнивал. я готов хоть сейчас, но для начала жду от EL[michlen] его версию |
Сообщ.
#9
,
|
|
|
potor, на восьмиразрядном контроллере?
|
Сообщ.
#10
,
|
|
|
да, и в чем проблема???
|
Сообщ.
#11
,
|
|
|
Входные данные пишем в R0, R1, R2 и R3. Например для сложения 65000 и 50 делаем так:
mov R1, #0E8h mov R2, #0FDh mov R3, #32h mov R4, #0 mov A, R1 add A, R3 mov R1, A mov A, R2 addc A, R4 mov R2, A Добавлено Цитата potor @ В том, что ещё и работать надо помимо форума. А вообще, я же просто уточнил. да, и в чем проблема??? Добавлено На С я тогда пробовал вот что (если подгонять под наш вопрос): int addition(int var1, int var2) { return var1+var2; } void main() { int var1=123, var2=456; addition(var1, var2); } Когда скомпилировал, получилось (если память не изменяет) около 5 Кб! После чего я обозлился на С и решил, что он здесь точно не катит. trainer, чувствую подвох, а понять не могу... |
Сообщ.
#12
,
|
|
|
вот тоже самое на сях
#include<at89x51.h> unsigned int add(unsigned int a, unsigned int b) { return a+b; } main() { unsigned int a; a=add(50, 65000); } это то что получилось после компиляции ; FUNCTION _add (BEGIN) ;---- Variable 'a' assigned to Register 'R6/R7' ---- ;---- Variable 'b' assigned to Register 'R4/R5' ---- ; SOURCE LINE # 2 ; SOURCE LINE # 3 ; SOURCE LINE # 4 0000 EF MOV A,R7 0001 2D ADD A,R5 0002 FF MOV R7,A 0003 EE MOV A,R6 0004 3C ADDC A,R4 0005 FE MOV R6,A ; SOURCE LINE # 5 0006 ?C0001: 0006 22 RET ; FUNCTION _add (END) ; FUNCTION main (BEGIN) ; SOURCE LINE # 6 ; SOURCE LINE # 7 ; SOURCE LINE # 10 0000 7DE8 MOV R5,#0E8H 0002 7CFD MOV R4,#0FDH 0004 7F32 MOV R7,#032H 0006 7E00 MOV R6,#00H 0008 120000 R LCALL _add 000B 8E00 R MOV a,R6 000D 8F00 R MOV a+01H,R7 ; SOURCE LINE # 11 000F 22 RET ; FUNCTION main (END) один в один твой пример и ничего лишнего я тут не вижу |
Сообщ.
#13
,
|
|
|
potor, что за компилятор?
Добавлено Кстати, если писать a=add(50, 65000);, то можно вообще без регистров обойтись - это ж константы. |
Сообщ.
#14
,
|
|
|
Цитата potor, что за компилятор? пакет keil uVision2 V2.04b сам компилятор V6.00i Цитата Кстати, если писать a=add(50, 65000);, то можно вообще без регистров обойтись - это ж константы. вот поэтому я и сделал это отдельной функцией иначе бы он все это дело оптимизировал |
Сообщ.
#15
,
|
|
|
Цитата potor @ Бум знать. Доеду до дома - скажу, каким я пробовал. пакет keil uVision2 V2.04b сам компилятор V6.00i |