LINUX.ORG.RU

Программируемый калькулятор на лиспе с двумя годами жизни от батарейки в форм-факторе ноутбука

 , , , ,


2

2

SparkFun RedBoard Artemis ATP на базе SoC Ambiq Apollo3.

ХарактеристикаЗначение
ДисплейSharp Memory in Pixel LS044Q7DH01
процессорArm Cortex-M4F с частотой работы 96 МГЦ.
ОЗУ364 КБ.
Накопитель1 МБ.
КлавиатураHappy Hacking Keyboard Lite 2.
Аккумулятор12000 мА*ч.
Потребление13,2 мВт.
Дополнительные возможностисолнечная батарея, целый ряд коннекторов
ОСPotatOS — модифицированный порт uLisp.

Тащем-та, автор столкнулся с ниипическими проблемами

Проблем изначально было много, но основная — невозможность считывать нажатия кнопок. Откуда проблема? Непонятно. В итоге автор опробовал Arduino pinMode и вызовы digitalWrite / digitalRead, но все это работало медленно, крайне медленно, хотя и верно. В частности, автор планировал сканировать нажатия клавиш с с частотой примерно 500 раз в секунду. Но ничего не получилось.

Сохранение ссылок и прямой их вызов помог решить эту проблему. Так, автор сократил время сканирования до 1 мс на сканирование. Сейчас сканирование занимает примерно 25% загрузки процессора.

Стоит отметить, что с самого начала автору сильно мешало отсутствие проверки ошибок. Если в коде, который он вводил, возникала какая-либо проблема, REPL аварийно завершал работу, и все приходилось перезапускать из консоли. К счастью, он наткнулся на сообщение на форуме uLisp. Там коллектив расширил более раннюю версию uLisp, добавив некоторую базовую обработку ошибок.

И про два года приврал

Изменена схема подачи питания на SD-карту. Для этого используются контактные площадки GPIO Apollo3. Достоинство решения в том, что оно позволяет полностью отключать питание, когда карта не используется, что очень помогает. Это снизило максимальное наблюдаемое среднее энергопотребление до 2 мА, поэтому автор в итоге и заявил о 2 годах автономной работы.

Но, писать заметки и играть в змейку данный калькулятор позволяет.

Линукс здесь при том, что калькулятор опенсурсный.

★★★★★

Последнее исправление: hobbit (всего исправлений: 2)

Ответ на: комментарий от DrBrown

угу, «я не осилил работу с GPIO и предотвращение дребезга контактов - потому прикрутил говнокод от абдурины и сделал проверку состояния кнопок 250 раз в секунду, чтобы точно-точно не пропустить момент когда юзер нажал кнопку»

NiTr0 ★★★★★
()

переписать модуль клавиатуры с постоянного опроса на срабатыванием от прерываний. это конечно «програмирование на уровне ассемблера» но позволит проц отправит в сон до получения прерываний. но сложно !! %)

pfg ★★★★★
()

Это я так понял эталонный пример как самому себе создать проблемы, выбрав экзотический язык и ОС, и потом их преодолевать? Ок, тащемто хобби как хобби. Кто то телесными жидкостями картины рисует или скульптуры из собственных отходов создаёт, кто то программирует железо на uLisp. Действительно, все уже подзабыли что лисп машины когда то существовали в аппаратном виде.

Jameson ★★★★★
()
Ответ на: комментарий от Zhbert

и я о том же (ассемблер просто к слову что программирование очень «низкое» :)
тут же лисп прописан как основной язык. интересно в лиспе есть прерывания ?? :)

pfg ★★★★★
()
Ответ на: комментарий от tiinn

Я в том смысле, что нажала я на ссылочку и пошла за чайком с плюшками, и все это время вентиляторы зверски жужжали, а когда я вернулась, страница все еще не загрузилась до конца, поэтому возникло справедливое недоверие к автору устройства.

Irma ★★
()

Очень сложно было пробираться через дебри текста в статье на хабре.

Автор замечает, что на старте возникла проблема с работой SPI, а именно — с разъемом камеры. Он опробовал букльвано сотни различных комбинаций параметров, но успеха не достиг. Лишь спустя время решение пришло само собой — сканирование нажатий клавиатуры с определенным паттерном.

Если я правильно понял, то клавиатура висит на шине SPI, и прерываний там нет, только бесконечный пуллинг в надежде отловить нажатие клавиши.

Текст ужасный, как будто набирали в пьяном бреду.

Radjah ★★★★★
()
Ответ на: комментарий от Irma

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

tiinn ★★★★★
() автор топика
Ответ на: комментарий от Radjah

Если я правильно понял, то клавиатура висит на шине SPI, и прерываний там нет, только бесконечный пуллинг в надежде отловить нажатие клавиши.

Из прерывания по таймеру запускаем приём по SPI, по приходу данных из SPI анализируем нажатие кнопок, остальное время спим.

А использовать для сканирования клавиатуры прерывания от GPIO – моветон.

DrBrown
()
Ответ на: комментарий от tiinn

отсутствием хранилища на флешке

Кстати о флешках. Было б интересно, если бы кто-то запилил эмулятор кассеты на флешке. Т.е. чтобы в таком же форм-факторе, вставил в магнитофон и вперёд.

no-such-file ★★★★★
()
Ответ на: комментарий от Jameson

Да какой бы он язык не выбрал. Идея очень стоящая, что-то нежручее и среднее между читалкой и компом для работы, никаких отвлекаюших свистоперделок и эффектов. Можешь назвать альтернативы? Можно без лиспа, можно с другой ОС.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

что-то нежручее и среднее между читалкой и компом для работы

Было бы еще понятно, если бы это была читалка, с экраном хотя бы 6" 800х600. Быстрый рефлективный экран для прыганья по документации может быть намного удобнее тормозючего еинка, и плевать на пиксели.

Но сейчас все, на что годится эта хреновина - это играть в тетрис, змейку и «волк ловит яйца». И дебильный самопиар, конечно.

thesis ★★★★★
()
Ответ на: комментарий от no-such-file

Такие эмуляторы уже запилены и лет 20 как продаются на хорошо известных площадках. Не рекомендую. На деле, весьма неудобна в использовании и саунд весьма посредственный.

lenin386 ★★★★
()

Ну а если поставить задачу автора более реалистично? Чтобы не на лиспе играться, а создать устройство, способное исполнять unix-подобную ОС и какие-нибудь полезные приложения, и при этом имеющее высокую автономность?

Первый пункт выше уже сказали - рефлективный экран. Второй - нужен какой-то компьютер, не такой урезанный как у автора. У Raspberry Pi Zero 2 W минимальное потребление тока составляет 75 mA. Нужна какая-то более low power платка, но при этом чтобы это всё еще был компьютер общего назначения, а не микроконтроллёр.

wandrien ★★
()
Ответ на: комментарий от tiinn

Во-первых, тогда нужно либо железо на x86, либо железо, способное вытянуть эмуляцию этого самого x86. Оба варианта, как я понимаю — жестокий удар по энергопотреблению.

Во-вторых, DOS в 2023 году это больно и обидно. Я, например, помню, как мне для ряда задач этого мегабайта тупо не хватало. Но да, у меня задачи были чуток посложнее, чем блокнот и змейка, я уже тогда свои программы стругал. А водружение на DOS, к примеру, драйвера TCP/IP (диски шли в комплекте с NT4) вообще практически не оставляло досу места для чего-то полезного.

Я бы задумался о создании чего-то похожего на PalmOS 5, но опенсорсного. Вот это была очень интересная система, работала на суперслабом по нынешним меркам железе, однозадачная, но всё было подогнано так, что пользователь этого практически не ощущал. При этом в отличие от нынешних андроидов не тормозила, отклик был мгновенный.

Если проприетарщики такое сделали, то теоретически и опенсорс может.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Во-первых, тогда нужно либо железо на x86, либо железо, способное вытянуть эмуляцию этого самого x86. Оба варианта, как я понимаю — жестокий удар по энергопотреблению.

Используй AMD Geode, Люк! Но, да, вряд ли тогда получится 2 года от батарейки.

Я бы задумался о создании чего-то похожего на PalmOS 5, но опенсорсного.

Возможно, возможно.

tiinn ★★★★★
() автор топика
Ответ на: комментарий от NiTr0

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

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)
Ответ на: комментарий от no-such-file

смысл? проще эмулировать магнитофон, с помощью мп3 плеера например. я так игры на реальном спектруме запускал с смартфона когда-то.

Rost ★★★★★
()
Последнее исправление: Rost (всего исправлений: 2)

Надеялся, что после моего вопроса накидают вариантов каких-нибудь SoC и плат, но увы.

Сам я нагуглить не осилил, гуглятся либо МК, либо устройства класса RPi.

wandrien ★★
()
Ответ на: комментарий от hobbit

Если проприетарщики такое сделали, то теоретически и опенсорс может.

Опенсорс смог сделать KolibriOS, так что вопроса «может ли» не стоит. А вот на чем запускать, стоит)

wandrien ★★
()