Pull to refresh
34
0

никто

Send message
это понятно, у меня у самого примерно такая ситуация была…
проблемы стали возникать когда я стал менять скорость SPI — вся работа с дисплеями стала рушиться! и вот тогда я понял что работаю с дисплеем не правильно…

сейчас у меня все модули работы с дисплеями работают как минимум от 1 мгц до максимума… — это как раз самый лучший показатель что все написано верно…
а может быть сделаете статью про написание ОС для арм процессоров?

интересует привилегированный и обычный режимы процессора, минимальные функции и т.д.
:-(((

жаль…
интересна сама система!
очень интересно, плюсую, пошел смотреть исходники
(написал чтобы потом иметь возможность комментировать)
я вообще не понял анекдота про блокировки :-(

в гугле одна из первых ссылок rutracker.unblock.ga — это левак или их не будут блокировать?
имхо достаточно регистрировать новые домены каждый месяц и по поиску их будут находить…

p.s. сам пользовался рутрекером крайне редко — поэтому плагин обхода не ставлю, и судя по ссылке выше это и не нужно…
именно так,

вообще на территории РФ любая организация является налоговым агентом по отношению к физ. лицу — так что именно она должна удерживать НДФЛ…
во всех случаях когда НДФЛ не был удержан — вы должны сделать это сами подав декларацию в налоговую…

p.s. вопросы проверки подали вы или не подали — я не обсуждаю…
в общем реализовал ваш алгоритм со сдвигом

правда с небольшими уточнениями
.global LCD_PIXEL
LCD_PIXEL:                       
		CMP	R0, 48		@ проверим допустимость координат
		BPL	LCD_PIXEL_exit
		CMP	R1, 84
		BPL	LCD_PIXEL_exit

                PUSH	{R1, R3, R4}

		@ вычисляем адрес пиксела
		LDR	R3, =LCD_BUFF
		ADD	R3, R3, R1       @ ADR + x

		LSR	R1, R0, 3  	 @  y >> 3
		MOV	R4, 84           @
		MLA	R3, R1, R4, R3   @ R3=(y>>3)*84+ADR+x 

		LDRB	R1, [R3]         @ читаем байт бита

                @ новый вариант наложения маски символа (1 - ставим, 0 - стираем)		
		AND	R4, R0, 0x07
		ROR	R1, R1, R4
		RSB     R4, R4, 32
        	BFI	R1, R2, 0, 1
		ROR	R1, R1, R4		
		STRB	R1, [R3]	@ запись в буфер

	        POP	{R1, R3, R4}

LCD_PIXEL_exit:
		BX	LR


прирост скорости 80%!!! (38225 тактов на рисование третьего слайда)
Такую проверку координат не хочу:
lsr r3, r0, #3
mov r4, #48
mla r3, r4, r3, r1
movw r1, #(48/8*84)
cmp r3, r1
blt 1f

это не проверка координат а скорее проверка выхода за границы буфера экрана… да и при попытке задать допустимый параметр Y но не допустимый по X — потом замучаешься отлаживаться

а вот циклический сдвиг — это красивое решение!!!
ldrb r1, [r3]
ror r1, r1, r0
rsb r0, r0, #0
bfi r1, r2, #0, #1
ror r1, r1, r0
strb r1, [r3]


постараюсь попробовать сегодня вечером!
на счет стандартного ABI — спасибо за подсказку, посмотрел, подумаю…
просто на асме я давно программирую (это на ARM недавно стал смотреть по серьездному), и у меня всегда низшие регистры являются расходными…
а вот сколько их будет — я себя не ограничиваю…

на счет списка желаний — если бы нашелся программист на Delpi (я как то очень давно писал на нем немного) и если бы мне хотябы каркас дали — то я бы дописывал потихоньку…
самому конечно разбираться не очень хочется с нуля, потому что тут что то одно — либо в асме разбираешься и максимально погружаешься либо во что то еще…

в принципе список за исключением некоторых пунктов не такой уж и сложный, по крайней мере у меня в голове задача структурируется, и я потихоньку функциональность напишу… но вот что касается интерфейса программы — то тут я точно не смогу :-((( (ну по меньшей мере пока не начну погружаться по серьездному)
По поводу BIC / BFI — посмотрю, просто сам ассемблер только изучаю, и ресурсов в которых бы понятно объяснялась логика команд в сети от совсем мало до совсем нет (хотелось бы видеть примеры вида: на входе / на выходе, а везде только названия из которых не всегда понятно что они собой представляют) — на счет того что написано по Си-шному — в точку! со своего старого исходника на Си и делал! :-)

Теперь когда у меня появился вывод на LCD — у меня как раз запланировано изучение команд, я наметил себе следующую часть публикации именно по командам, чтобы полностью разобрать какая и как работает…

На счет сохранения регистров — ну по процедурам _INIT согласен, на счет других же — абсолютно не согласен! процедуры тогда и только тогда хороши — когда не нужно думать о том что будет после них… в том же драйвере дисплея есть подпрограммы проверки флагов, управления линиями управления дисплея — вот они регистры не сохраняют, и это уже моя забота была за этим следить… а все что отдается на .global — должно гарантировано не портить регистры (ну по крайней мере где это логично)

А какие из существующих подходят для ассемблера (я не про подсветку кода говорю это как раз низкоприоритетное желание)?
у меня вот получился следующий список желания (я еще не сортировал по очередности и нужности):
1) Подсветка кода ассемблера
2) Авто дополнение вводимого кода (PUSH -> POP, IT — IT Block, и т.д.)
3) Контроль глобальных и локальных меток
4) Подсказка по инструкциям ассемблера
5) Контроль параметров подпрограмм
6) Поддержка программ как модулей с возможностью их добавления и удаления
7) Контроль в редакторе опций условного исполнения
8) Перенаправление сообщений консоли на себя, компиляция и компановка при помощи GNU AS
9) Файлменеджер проекта с крупными значками
10) Закладки в файл менеджере (переход в нужную папку одним кликом)
11) Переход на метку программы в редакторе
12) Автоматическое формирование списка констант модуля и дописывание в начало
13) Система помощи по регистрам настройки микроконтроллера
14) Мастеркода (автосоставитель кода) — например для настройки GPIO, SPI, DCMI и т.д.
15) Эмуляция исполнения кода
16) Настраиваемые окна среды (все! а не только окно редактора)
17) Отладка (пока не понимаю как, но как задача висит)
К читателям:

вопрос на засыпку — в следующей части просто рассмотреть работу SPI или не тянуть кота за хвост и подключить какой нить простой SPI дисплей?
:-)
ну это понятно…

но ведь это вопросы безопасности — а значит нужно всегда рассматривать самый крайний с точки зрения негатива случай…
просто мне бы очень не хотелось чтобы кто-то обосновывал мою подлинность на основании данных о фактах которые ко мне лично никак не относятся…

а если я работаю в клиентском отделе, и у меня за стойкой в день по 150 человек проходят?

а если работа носит разъездной характер?

а если кому то понадобиться меня «заменить» — то отсканировать блютуз устройста в моем окружении, и wifi сети — сможет ВООБЩЕ ЛЮБОЙ ПЕРВОКЛАСНИК! причем потом в телефоны друзей запишет нужные (отсканированные) имена телефонов, в роутер — имя точки доступа — и что ???? — точность 90% говорите ?!!!

помоему гугл уже «воспитывали» не тему сканирования сетей wi-fi (к сожалению не знаю чем закончилось), — они теперь хотят еще этот процесс делать на телефоне каждого пользователя?

тогда фактически это система контроля за моим положением, моими перемещениями, контроль за тем с кем я общаюсь… вы тут переживаете за то что большой брат за вами следит? по сравнению с гуглом — слежка большого брата это детские игры в шпионов!

Пароль, пароль, и еще раз пароль…

а все остальное — это баловство!
мда…
ну вот я например пользуюсь какими то программами на работе, рядом у меня коллеги, wifi… все ОК, коэффициент доверия будет 90…
потом банально поехал в отпуск… и все ?!!!

ИМХО совсем сырая идея… совсем, совсем сырая… которая скорее всего скатится до банального сканирования лица (уже есть в андроид), сетчатки глаза (со всеми замечаниями, что уже написаны в комментариях выше), отпечатков пальцев (для телефонов в которых сканер отпечатков есть)…
ой, правильнее
CMP R1, R2
нужно было сделать в цикле…
одно не понял, а зачем так мудрено копировать ?!!! или это компилятор Си так поизвращался?

<source lang=«XML»
CopyVectorTable:
ldr r0, =_sivector //Записываем в регистр R0 начальный адрес таблицы прерываний во flash-памяти
ldr r1, =_svector //Записываем в регистр R1 начальный адрес таблицы прерываний в оперативной памяти
MOV R4, R1
ldr r2, =_evector //Записываем в регистр R2 конечный адрес таблицы прерываний в оперативной памяти
loop:
LDR R3, [R0]+4!
STR R3, [R1]+4!
CMP R2, R3
BNE LOOP

ldr r2, =VTOR //Записываем адрес регистра VTOR в регистр r2
str r4, [r2] //Записываем по адреcу, содержащемся в r2 значение r0
насколько я понял, проблема в предъявляемых требованиях к обычным такси…

для них необходимо и лицензирование, и как тут уже писали выше — знание лондона, и еще кучу всяких фенечек которые априори стоят денег… и конечно вкладываются в тариф…

и тут приходит UBER и фактически нанимает водителей с улицы, без каких то особых требований…

вот тут и вопрос — если к UBER-такси требований нет — почему они есть к обычным таксистам? нужно быть логичным до конца — и снижать требования и к ним (тогда они будут предлагать свои услуги дешевле)

А так получается что например таксист «А» может неделю не мыть машину не внутри ни снаружи (и сам не мыться) и пользоваться UBER сервисом, а таксист «Б» по «закону» обязан машину и мыть, и чистить (причем на платных мойках потому как на улице машину самому мыть запрещено), должен быть зарегистрирован, иметь лицензию, специально оборудованный автомобиль (тем же таксометром), иметь плед в комплекте, расширенную аптечку, уметь оказывать первую помощь, и многие другие «ДОЛЖЕН»………

вопрос — а почему так несправедливо ?! — если для UBER такси этого не нужно — то давайте отменять для всех… и получите вакханалию к которой так стремитесь…

вот и основа для скандала, и в суде перспектива у такого дела действительно есть…
makefile же не берется ниоткуда его и нужно написать… :-)

сейчас в принципе уже накидал, тестирую… очень интересная весчЬ получилась!!! наверное ее стоит выделить в публикацию
Насчёт глобальных и локальных меток… помню лет 20 назад когда кодил на асме в турбоасме были директивы для этого, помоему это global и import если не ошибаюсь, попробуй поискать аналогичные

нашел, но что то не соображу как теперь cmd файл поправить :-(

нужно в цикле организовать перебор каталогов и файлов в них, потом в этом же цикле создать в отдельном каталоге такую же структуру каталогов (вот тут я что то уже голову сломал как это сделать) и запустить для каждого файла .asm компилятор чтобы он сделал .o файл…
а потом все получившиеся .o файлы подсунуть компановщику…

p.s. у меня пока не получается создать структуру каталогов :-(
ну все примеры смысла не имеют, но для понимания механизма очень полезны!

я вот про сдвиговую генерацию значения даже не додумался!!! более того — со сдвигами у меня туго — сидел и на бумажке рисовал сейчас :-))

в моем примере запись в R2 и в R3 местами поменять нужно!!!

кстати, на асме — на больших участках кода оптимизировать код проще — зачастую 5-10 строк асм-кода уже можно в подпрограммы выделять, да и частичное использование кода проще делать…

хотя конечно на асме тяжело писать — меня например сейчас напрягает то, что не знаю как делать изолированные метки :-(
в armasm метки кроме определенных директивами компилятора export/import видны только внутри файла исходника…
то есть шанса на пересечение в разных файлах нет…
а вот в GNU AS такой фичи не нашел :-((( вернее она там есть (по названию метки, не помню точно с «L» чтоли начинаться должны) — но указано (как я понял) как отмирающая что ли, и не во всех версиях реализована…

Information

Rating
4,262-nd
Location
Чукотский АО, Россия
Date of birth
Registered
Activity