Добавлено: Пт авг 17, 2007 17:10:19
Кстати помотреть "как должно быть" можно в PROTEUS - взять модельку at89c52 и память или просто посмотреть как она ножками должна дрыгать.
arm2day. народ .ru - "ARM на пару дней" типа.Mozart писал(а):вот к примеру ARM... почему не АRM??
чем программить чем отлаживать в чём писать...
Подойдут там же где используют и 8 и 16 битные МК.Mozart писал(а):ARM где лучше применять...
Сейчас пишут.... да, пишут, потому что идет бездумное "упрощенчество" всего: поглядите, все за нас уже придумано, а нам подсовывают готовенькое - компьютеры, которые лучше нас знают, что и как надо делать, заготовки программ, которые за нас все делают... Вы же превращаетесь из художника в простого штамповщика, который тискает готовые штампы. Но слава достается не вам, а тому, кто этот штамп вырезал... В интернете есть немало доказательств того, что разработка "с нуля" программы на Си не более чем на 5-6% времени быстрее, а часто наоборот - дольше, чем на ассемблере, но этот факт упopно игнорируется всеми... А с учетом ассемблерной оптимизации - гарантированно дольше в разы! Видят только мизер: использование готовых процедур, которые в сущности в серьезном проекте ничего не решают... Дело ваше, кушайте пережеванную другими пищу, теряйте собственные зубы - мне все равно...Mozart писал(а):сейчас пишут на си потом, если критично по времени оптимизирует - делают асмовские вставки, как мне кажется оч правильный подход..., мне было бы интересно посмотреть сколько строчек будет и времени займёт, если написать программу управления 8мью вентиляторами... и передачи скорости и температуры в комп... связь с другими МК по и2с... и т.д. ...
БедаARV писал(а):Но слава достается не вам, а тому, кто этот штамп вырезал...
всё нормально... накипело...Извините, я снова сорвался на недопустимый тон, но я искренне возмущен подобными высказываниями. Больше не буду, прошу прощения.
ну да... зачем тратить время?? когда уже всё сделано... когда делаешь что-то новое и тратишь время разбираешься... посмотрите RTOS AVRx зачем это писать когда уже написано??? единственно иногда хочется самому это сделать - сидишь и делаешь......идет бездумное "упрощенчество" всего...
никто не преващается... вы же себе машину покупаете, а не собираете... материнку вы тоже себе покупаете и различную преблуду... так вот ваша задача её спаять!!! - бред... я ещё раз говорю "для чего тратить время на то что уже написано?" дописать, исправить, уменьшить размер и т.д..... подумайте - это экономия нашего времени... художник не должен думать о кистях... где их купить и т.д. они должны быть у него и он должен ими рисовать!!!Вы же превращаетесь из художника в простого штамповщика
о каких процедурах вы говорите???использование готовых процедур
- вот это я делал на пиках и как раз на асме - оказалось лучше по быстродействию, но намаялся то один сегмент ярче другого то вообще не видно как светится... даже видео есть...сделайте ПОСЕГМЕНТНУЮ индикацию, как у меня
зря вы так... я хотел спросить почему вы отдаёте предпочтение 51ым... только из-за быстродействия??? и спросил а почему бы не взять АРМы?? они тоже относительно быстрые... если бы вы в обучалку про 51ые написали...И еще, про АРМы, не смотря на то, что тема про 51-е. Вы забыли, что есть ведь и 32-разрядные МК...или DSP (они и 128-битные не редкость)... может, сразу на них обучалку надо? А что, tych вам сбацает - какие проблемы? 90% из здесь присутствующих (да и вообще среди любителей, наверное) ни разу не написали программу, которая задействовала бы хотя бы 70% ресурсов даже паршивенького тини2313, не говоря про Atmega16, - но АРМы нам подавай! ДА ЗАЧЕМ ОНИ ВАМ?!?! Только потому, что это модно и "круто"? Тогда я пас, больше в теме обсуждения МК не участвую - ну не крутой я, что поделать...
Код: Выделить всё
/*c - language*/
#include <avr>
int main()
{
DDRC = 0x01;
PORTC = 0x00;
while (1)
{
PORTC |= (1 << 0);
for(uint16_t i = 0; i < 10000; i++);
PORTC &= ~(1 << 0);
for(uint16_t i = 0; i < 10000; i++);
}
}
Код: Выделить всё
/*disasm*/
00000000: 940C0046 JMP 0x00000046 Jump
+00000002: 940C0063 JMP 0x00000063 Jump
+00000004: 940C0063 JMP 0x00000063 Jump
+00000006: 940C0063 JMP 0x00000063 Jump
+00000008: 940C0063 JMP 0x00000063 Jump
+0000000A: 940C0063 JMP 0x00000063 Jump
+0000000C: 940C0063 JMP 0x00000063 Jump
+0000000E: 940C0063 JMP 0x00000063 Jump
+00000010: 940C0063 JMP 0x00000063 Jump
+00000012: 940C0063 JMP 0x00000063 Jump
+00000014: 940C0063 JMP 0x00000063 Jump
+00000016: 940C0063 JMP 0x00000063 Jump
+00000018: 940C0063 JMP 0x00000063 Jump
+0000001A: 940C0063 JMP 0x00000063 Jump
+0000001C: 940C0063 JMP 0x00000063 Jump
+0000001E: 940C0063 JMP 0x00000063 Jump
+00000020: 940C0063 JMP 0x00000063 Jump
+00000022: 940C0063 JMP 0x00000063 Jump
+00000024: 940C0063 JMP 0x00000063 Jump
+00000026: 940C0063 JMP 0x00000063 Jump
+00000028: 940C0063 JMP 0x00000063 Jump
+0000002A: 940C0063 JMP 0x00000063 Jump
+0000002C: 940C0063 JMP 0x00000063 Jump
+0000002E: 940C0063 JMP 0x00000063 Jump
+00000030: 940C0063 JMP 0x00000063 Jump
+00000032: 940C0063 JMP 0x00000063 Jump
+00000034: 940C0063 JMP 0x00000063 Jump
+00000036: 940C0063 JMP 0x00000063 Jump
+00000038: 940C0063 JMP 0x00000063 Jump
+0000003A: 940C0063 JMP 0x00000063 Jump
+0000003C: 940C0063 JMP 0x00000063 Jump
+0000003E: 940C0063 JMP 0x00000063 Jump
+00000040: 940C0063 JMP 0x00000063 Jump
+00000042: 940C0063 JMP 0x00000063 Jump
+00000044: 940C0063 JMP 0x00000063 Jump
+00000046: 2411 CLR R1 Clear Register
+00000047: BE1F OUT 0x3F,R1 Out to I/O location
+00000048: EFCF SER R28 Set Register
+00000049: E1D0 LDI R29,0x10 Load immediate
+0000004A: BFDE OUT 0x3E,R29 Out to I/O location
+0000004B: BFCD OUT 0x3D,R28 Out to I/O location
+0000004C: E011 LDI R17,0x01 Load immediate
+0000004D: E0A0 LDI R26,0x00 Load immediate
+0000004E: E0B1 LDI R27,0x01 Load immediate
+0000004F: EFE2 LDI R30,0xF2 Load immediate
+00000050: E0F0 LDI R31,0x00 Load immediate
+00000051: E000 LDI R16,0x00 Load immediate
+00000052: BF0B OUT 0x3B,R16 Out to I/O location
+00000053: C002 RJMP PC+0x0003 Relative jump
+00000054: 9007 ELPM R0,Z+ Extended load program memory and postincrement
+00000055: 920D ST X+,R0 Store indirect and postincrement
+00000056: 30A0 CPI R26,0x00 Compare with immediate
+00000057: 07B1 CPC R27,R17 Compare with carry
+00000058: F7D9 BRNE PC-0x04 Branch if not equal
+00000059: E011 LDI R17,0x01 Load immediate
+0000005A: E0A0 LDI R26,0x00 Load immediate
+0000005B: E0B1 LDI R27,0x01 Load immediate
+0000005C: C001 RJMP PC+0x0002 Relative jump
+0000005D: 921D ST X+,R1 Store indirect and postincrement
+0000005E: 30A0 CPI R26,0x00 Compare with immediate
+0000005F: 07B1 CPC R27,R17 Compare with carry
+00000060: F7E1 BRNE PC-0x03 Branch if not equal
+00000061: 940C0065 JMP 0x00000065 Jump
+00000063: 940C0000 JMP 0x00000000 Jump
@00000065: main
---- main.c ---------------------------------------------------------------------------------------
3: {
+00000065: EFCF SER R28 Set Register
+00000066: E1D0 LDI R29,0x10 Load immediate
+00000067: BFDE OUT 0x3E,R29 Out to I/O location
+00000068: BFCD OUT 0x3D,R28 Out to I/O location
4: DDRC = 0x01;
+00000069: E081 LDI R24,0x01 Load immediate
+0000006A: BB84 OUT 0x14,R24 Out to I/O location
5: PORTC = 0x00;
+0000006B: BA15 OUT 0x15,R1 Out to I/O location
9: PORTC |= (1 << 0);
+0000006C: 9AA8 SBI 0x15,0 Set bit in I/O register
+0000006D: E08F LDI R24,0x0F Load immediate
+0000006E: E297 LDI R25,0x27 Load immediate
11: for(uint16_t i = 0; i < 10000; i++);
+0000006F: 97C2 SBIW R24,0x32 Subtract immediate from word
+00000070: FF97 SBRS R25,7 Skip if bit in register set
+00000071: CFFD RJMP PC-0x0002 Relative jump
13: PORTC &= ~(1 << 0);
+00000072: 98A8 CBI 0x15,0 Clear bit in I/O register
+00000073: E08F LDI R24,0x0F Load immediate
+00000074: E297 LDI R25,0x27 Load immediate
15: for(uint16_t i = 0; i < 10000; i++);
+00000075: 97C2 SBIW R24,0x32 Subtract immediate from word
+00000076: FF97 SBRS R25,7 Skip if bit in register set
+00000077: CFFD RJMP PC-0x0002 Relative jump
+00000078: CFF3 RJMP PC-0x000C
О каких плясках с бубном речь? Как я понимаю о том, что в x51 нет команд подобных avr-овским, как например: BRSH, BRLO, BRMI, BRPL, BRGE и т.п. ?По моему наличие всех необходимых бит признаков и установка их при любой операции - самый большой прорыв, по сравнению с х51. Именно это дало такой прирост производительности при работе с арифметикой. Там сравнение - это просто пляски с бубном.
Да. прально.Brutaller писал(а):любой внутренний модуль можно отмапить на любой пин. Я правильно понял? Если да, то это очень круто и удобно.
нет, не правильно. "матрица коммутации" самостоятельно "мапит" выводы в зивисимости от того, какие периферийные устройства задействованы. при этом почти любое устройство может оказаться почти на любых выводах, однако не на конкретно указанных пользователем, а в соответствии с логикой матрицы коммутации.Brutaller писал(а):Поковырявшись по силабовским даташитам, я понял, что любой внутренний модуль можно отмапить на любой пин. Я правильно понял?
Дак логику коммутации пользователь знает надеюсь из даташит ...ARV писал(а):однако не на конкретно указанных пользователем, а в соответствии с логикой матрицы коммутации.
Тогда это наоборот не фига не удобно :-/ARV писал(а):нет, не правильно. "матрица коммутации" самостоятельно "мапит" выводы в зивисимости от того, какие периферийные устройства задействованы. при этом почти любое устройство может оказаться почти на любых выводах, однако не на конкретно указанных пользователем, а в соответствии с логикой матрицы коммутации.
я просто хотел подчеркнуть, что хотя сигналы, например, SPI погут "гулять" по ножкам корпуса МК, однако не произвольно, а строго в определенном порядке: если назначенные по умолчанию выводы свободны - они и будут сигналами SPI, а если более приоритетное устройство (АЦП например) заняло один из этих выводов - сигналы SPI будут сдвинуты на необходимое число линий - примерно так...tych писал(а):Дак логику коммутации пользователь знает надеюсь из даташит ...ARV писал(а):однако не на конкретно указанных пользователем, а в соответствии с логикой матрицы коммутации.
Иначе он ламер а не юзер.