Сообщения

C# Some errors and fast solutions

SqlException: Новая транзакция не допускается, так как в данном сеансе запущены другие потоки. var clients = _context.clientSet; foreach (var c in clients) {     //     Some code here f.e.     //     string FullName = c.Name + " " + c.LastName;      _context.SaveChanges(); } _context.SaveChanges() необходимо вынести за пределы блока Или Выгрузить необходимые данные в какую-либо коллекцию и далее работать с этой коллекцией, например: var clients = _context.clientSet.Select(x => new {     Name = x.Name,     LastName = x.LastName }).ToList(); foreach (var c in clients) {     //    Some code here f.e.     //    string FullName = c.Name + " " + c.LastName;     _context.SaveChanges(); }

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) Например, нам...

STM32. Часть 4. Задержки, таймеры, системный таймер SysTick

Задержки в STM32. Задержки можно реализовывать с помощью пустого цикла и с помощью прерываний. При организации задержки с помощью пустого цикла МК ничего не делает некоторое количество тактов. При организации задержки с помощью таймеров повышается точность. Таймер при этом настраивается в режиме одного импульса, устанавливается предделитель и число, до которого следует считать. Затем проверяется установка флага. Для организации периодичности выполнения задач имеет смысл настраивать таймеры по переполнению в обычном режиме (не в режиме 1 импульса), чтобы прерывание вызывалось с периодичностью каждые n тактов (мкс, мс, с). Как вариант реализации периодичности выполнения команд имеет смысл рассматривать системный таймер SysTick, функция инициализации и настройки которого имеется в самой CMSIS (stm32f10x.h). Программная задержка. while(time) time--; Задержка на таймере. Условимся использовать для задержек на таймере таймер TIM7 (когда свободен SysTick, то его)     ...

STM32. Прерывания NVIC

Прерывания в STM32. Прерывания описаны в стартап файле (startup_*.s) и stm32f10x.h ( IRQn_Type). Управляет прерываниями модуль NVIC. Настройка прерываний: Настроить и разрешить необходимые прерывания периферии.  Разрешить глобальные прерывания. Описать обработчик прерывания. Рассмотрим внешние прерывания. За внешние прерывания отвечает модуль EXTI (EXTernal Interrupts). Особенностью внешних прерываний STM32 является то, что их можно повесить на любую ножку, но всего можно настроить 16 прерываний, т.е. столько же, сколько линий у порта. Прерывания настраиваются на линию, а не порт, поэтому когда возникает прерывание, необходимо вручную проверять, с какого порта. Настраиваем прерывание: Подаем тактирование на порт и на альтернативную функцию. RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN; GPIOA->CRL &= ~GPIO_CRL_MODE0; // Настраиваем на ввод Ножка на кнопке подтянута к земле, поэтому CNF можно не трогать. AFIO->EXTICR[0] |= AFIO_EXTICR1_EX...