- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
//Given a number, turns on those segments
//If number == 10, then turn off number
void lightNumber(int numberToDisplay) {
#define SEGMENT_ON LOW
#define SEGMENT_OFF HIGH
switch (numberToDisplay){
case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;
case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
; и т. д.
case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;
case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}
guest 25.10.2014 15:04 # +2
Dummy00001 25.10.2014 18:57 # −2
bormand 25.10.2014 19:02 # −2
Dummy00001 25.10.2014 19:26 # +1
guest 25.10.2014 19:42 # −2
Dummy00001 25.10.2014 19:58 # −2
в ГК, инструкции записи в порт будут одна за одной (если segA/etc константы, и digitalWrite() просто mmio макро).
в твоем коде инструкции записи в порт будут перемешаны с сравнениями/переходами.
когда речь идёт о вводе/выводе, без реальной железки можно только спекулировать почему и как.
ЗЫ пример двух-недельной давности. в драйвере одной встроеной железки, в USB дровах, нашел msleep(10) в одной ветке обработчика прерывания. коммент: не трогайте этот слип, иначе WinXP железку не будет распознавать. теория vs. практика.
kipar 25.10.2014 22:30 # −1
Dummy00001 25.10.2014 22:36 # −2
борманд там меня снизу просвятил.
anonimb84a2f6fd141 25.10.2014 23:34 # −5
govnokod3r 25.10.2014 21:53 # +1
Dummy00001 25.10.2014 22:14 # −2
А я жаловался что u-boot линухов код прёт без разбора. Лучше б спёрли.
Dummy00001 25.10.2014 22:15 # −2
bormand 25.10.2014 22:16 # −2
P.S. Вот характеристики: http://arduino.cc/en/Products.Compare
Dummy00001 25.10.2014 22:31 # −2
на этой неделе читал сырцы busybox - просто офигительный контраст.
bormand 25.10.2014 22:49 # −2
На тиньках и мегах, емнип, всего пару тактов задержка между записью в порт и переключением ноги. И никаких кешей и конвейеров на этом контроллере нету. Так что эти функции на порядок медленнее самого i/o...
Почему я и писал, что лучше бы подключить все сегменты на один порт, и переключать за одну запись.
P.S. Хотя для переключения светодиодов just for fun и так сойдёт. Да и никто не юзает ардуино для управления чем-то мало-мальски серьезным...
anonimb84a2f6fd141 25.10.2014 23:35 # −6
guest 28.11.2014 19:00 # +1
С Ардуиной проблема в том, что линии нумеруются последовательно. Откуда новичку знать, что к линиям 1-3 одновременный доступ возможен, а к 7-9 - нет? Впрочем, это типичная беда ардуины - скрытие особенностей железа.
bormand 28.11.2014 19:07 # 0
Хех, так они там доабстрагировались до того, что вообще отобрали возможность переключать ноги не по одной за вызов?
guest 28.11.2014 19:56 # +1
Хотя прямой доступ должен был сохраниться, но он не правильный с точки зрения идеологии ардуины.
То есть, наверное, можно написать PORTB=50; но на какие digitalWire это выведено на самом деле - надо искать в документации.
С другой стороны, ардуина и позиционируется как "контроллеры для самых маленьких" и странно ожидать от нее большего, как делают фанатики.
Но некоторые люди используют только железную часть со всеми шильдиками и рюшечками. А код пишут в своей любимой среде - хоть cvavr, хоть Студия, хоть бейсик какой-нибудь. Довольно разумный подход, я считаю.
anonimb84a2f6fd141 25.10.2014 23:36 # −5
guest 28.10.2014 08:39 # +2
guest 28.10.2014 16:37 # −2