Нужен совет

Информация из первых уст

Наши авторы

Иван Парфенов

Кирилл Анофриев

Павел Егоров

Анна Киросова

Как восстановить электронную книгу

Есть способ для программного восстановления электронных книг - портативных медиа плееров. Способ работает на книгах фирм Effire, Ritmix, Texet, Teclast и др китайского производства. 
 

Подключение внешнего Wi-Fi адаптера к планшету на андроид 4

#!/system/bin/sh

 

ip link set wlan0 down

iwconfig wlan0 channel auto

iwconfig wlan0 Bit 54Mb/s

iwconfig wlan0 essid 'SSID name'

sleep 10

 

Оптимизируем код в Ардуино

Среда разработки Arduino IDE сделана для ускоренной разработки приложений для микроконтроллеров Atmega. Однако код, создаваемой на выходе программы получается сильно перегруженным. Возьмем пример с обычной мигалкой blink.ino:

void setup() {                
  pinMode(13, OUTPUT);     
}
 
void loop() {
  digitalWrite(13, HIGH);
  delay(1000);              
  digitalWrite(13, LOW); 
  delay(1000); 
}
На выходе после компиляции получаем файл размером 1026 байт. Результатом будет мигание светдиода на ардуино совместимой плате, например на Seeeduino или DFRDuino.
Теперь давайте загрузим в IDE следующий код:
#include <avr/io.h>
#include <util/delay.h>
 
int main( void )
{
  DDRB |= (1<<5);       // устанавливаем вывод PB5 как выход
  while(1){
  PORTB &= ~(1<<5);  // устанавливаем низкий уровень на выводе PB5
  _delay_ms(1000);      // ждем 1000 миллисекунд
  PORTB |= (1<<5);    // устанавливаем высокий уровень на выводе PB5
  _delay_ms(1000);    // снова ждем 1000 миллисекунд
}
 
  return 0;
}
После компиляции получаем 210 байт, а результат тот же - мигание светодиода. Давайте рассмотрим его подробнее. Первый заголовочный файл нужен для того, чтобы компилятор не "растерялся" при встрече записей DDRB и PORTB. Компилятор полезет в файл io.h, а из него в файл iom32.h (для atmega32).  В нем компилятор наидет строчки:
#define DDRB    _SFR_IO8(0x17)
#define PORTB   _SFR_IO8(0x18)
и успокоится :). Сделано это для нашего удоства и только.
Далее идет файл delay.h - в нем расписана функция _delay_ms(). Она более компактна по сравнению со встроенной delay().
В примере нет раздела с void Setup() - здесь настройки задаются после int main, а бесконечный цикл задается оператором while(1). 
Строка DDRB |= (1<<5);  расшифровывается так: DDRB = DDRB | (1<<5);  которая вот что делает: берет число 00000001 и сдвигает его на 5 знаков вправо, добавляя слева нули, т.е. получаем число 00100000. Дальше происходит операция ИЛИ:
00000000 или любое другое
00100000
-------------
00100000 - это значение записывается в регистр DDRB и делает 5-й вывод порта B выходом. Взгянув на схему платы Ардуино можно заметить, что светодиод припаян к выводу PB5 (он же 13-й вывод на плате). Строчка PORTB &= ~(1<<5); устанавливает низкий уровень на ножке PB5.
_delay_ms(1000); задает задержку с 1000 миллисекунд. PORTB |= (1<<5); устанавливает высокий уровень на выводе PB5.  return 0; нужен для синтаксиса.