Сообщения

Сообщения за октябрь, 2018

AVR. Assembler. Алгоритмы.

Деление на 10. В AVR есть команда перемножения, но нет деления. Реализовать деление на 10 можно путем комбинации умножения и сдвига. Умножение: MUL Rd,Rr. Результат (16-разрядное число) сохраняется в регистрах R0 (младший байт) и R1 (старший байт). Деление на 10: Result = HI(SRC * 0xCD) >> 3. Resut - результат, SRC - исходное число. Т.е.: LDI R16,0xAB LDI R17,0xCD MUL R16,R17 MOV R16,R1 LSR R16 LSR R16 LSR R16 Результат - в R16. Деление на 5 и на 20 делается таким же образом, при этом оперируя сдвигом в конце алгоритма, т.е. для деления на 20 - добавить еще LSR R16, для деления на 5 - удалить 1 сдвиг.

Поиск в Яндекс справочнике.

Поиск компаний и организаций в Яндекс справочнике. Как-то понадобились специфичные детали и материалы, которые продаются в магазинчиках довольно редко, а если и попадаются, то наценка просто бешеная. Пришлось искать компании, кто чем занимается. Наткнулся на справочник от Яндекс. Для пользования необходимо залогиниться. В поиске набираем необходимую нам информацию, например, тип организации, род деятельности, название и т.д., например "кафе", "производство красок" и т.д. Если необходимо совместить несколько родов деятельности, то разделять их надо символом "+". В выдаче будет список организаций, в которых будут указаны: название, полный адрес, сайт, телефон, категории. Помимо прочего, применение справочника может быть самое разное, например, при необходимости ремонта чего-либо - поиск компаний, занимающихся производством или реализацией необходимых товаров. P.S. коль в предыдущей статье был рассмотрен пример работы с XPath, то справочник является ярк...

AVR Assembler. Заметки

Короткие заметки по AVR Assembler. Глухая заглушка без меток: JMP PC Данные во флэш и работа с ними. В секторе .CSEG данные, например, строка, записываются в виде: Метка: .db "TEXT" Пример: OK_MSG: .db "OK" ERR_MSG: .db "ERROR",0 Примечание: для сообщения ошибки добавляется ",0" чтобы не возникало предупреждение "misalignment - padding zero byte", связанное с особенностями ассемблера AVR. Предупреждение возникает, когда количество байт нечетное, поэтому для "ОК" его нет, а в "ERROR" - 5 байт, поэтому добавляется нолик. Далее для работы с этими данными надо получить их адрес: LDI R20,low(2*OK_MSG) ; Берем младший байт LDI R21,High(2*OK_MSG) ; Берем старший байт Умножаем на 2, т.к. МК 8-битный, а флэш адресуется в словах 16-битных. Для удобства в оперативке создаем переменную-указатель на эти данные: .DSEG OK_Ptr: .byte 2 И сохраняем адрес в эту переменную: ...

Немного про парсинг web-страниц. (Python)

Тема не раз обсуждалась на просторах рунета. Соберу в одном топике наиболее важные моменты, применяемые в практике. Парсить удобно двумя способами: по тегам с классами, по XPath и по микроразметке Schema.org. При этом последний вариант наиболее универсален для тематических сайтов. Общим моментом для всех способов является загрузка (получение) web-страницы. Для работы потребуется подключить модуль requests. import  requests Затем создать сессию и указать юзер-агента: s  =  requests.Session() s.headers.update({          'User-Agent' :  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:45.0) Gecko/20100101 Firefox/45.0'     }) Для получения содержимого веб-страницы используем метод get, т.е. requests.get('http://site.com')или s.get('http://site.com')Для удобства работы создаем функцию: def  get_page(url): return  s.get(url) Например, нам...