Знаковая проблема

Давно ничего не писал. А тут вдруг решил проблему, которая периодически занимала меня последний месяц. Речь про задачу про знаки из первой лабораторной работы курсеровского курса Hardware/Software Interface. Из-за этой задачи, я собственно и дропнул этот курс – не сумел решить с наскоку и расстроился.

Суть задачи в том, что используя только операции сложения, вычитания, умножения, битового сдвига влево и вправо, побитовых И, ИЛИ, НЕ, исключающего ИЛИ и оператора логического отрицания решить задачу нахождения знака 32-битного числа со знаком. На вход функции подаётся число, на выходе должны быть:

  • 1 – если число положительное
  • -1 – если число отрицательное
  • 0 – если число – это ноль

Использовать какие-либо операторы сравнения запрещено.

Задача решается элементарно благодаря оператору логического отрицания. Суть этого оператора в том, что он возвращает единицу, если ему на вход дали ноль и возвращает ноль, если на вход ему дали не ноль.

Фишка в том, что знак хранится в 31-ом бите и сам по себе выделяется очень просто. Засада на месяц состояла в том, чтобы отделить положительные числа от нуля – в обоих случаях в 31-ом бите сидит ноль. А решение состоит в том, чтобы умножить выделенный знак на двойное логическое отрицание исходного числа. Вот и весь фокус. Весьма тривиальный и простой, но непривычный для меня.

out = (1-2*((unsigned)in>>31))*!!in;

Продукты Xilinx – трухлявая хрень!

Целый месяц бьюсь с отладочной платой ML510 от Xilinx. Такая лопата, внешне выглядящая как материнская плата ATX-формата. На борту – FPGA Virtex-5. Чем дальше я пытаюсь её заставить работать, тем больше она меня выбешивает!!!

Во-первых, это найденные баги:
1. В IP-ядре xps_tft, которое отвечает за коммуникации с чипом от Crontel и вообще за возможность работы с дисплеями по DVI какой-то криворучко забыл скобку поставить. Мне то пофиг, я исправил. Но вот КАК ОНИ ЭТО ТЕСТИРОВАЛИ??? Без скобки оно тупо не компилируется же!!!
2. В Xilinx Platform Studio раньше для выбора того куда присоединён порт был StringGrid с инкапсулированными ListDown’ами. Какому-то придурку это показалось некрасиво. Теперь там нужно щёлкнуть мышкой и появится уродливое мини-окошко, в котором надо выбрать выход с помощью того же ListDown’а. Стоит ли говорить, что механизм появления окошка по клику писал опять же криворучко? Я потратил сутки, чтобы понять, что окошко не появится в принципе, если XPS развёрнута на неосновном дисплее. Да-да, в Xilinx не знают, что многие пользуются несколькими мониторами одновременно!

Во-вторых. Платформа для написания кода для PowerPC 440, который встроен в тот Virtex-5 называется Xilinx SDK. Да щас! ЭТО ЭКЛИПС!!! Я его уже видеть не могу. Глючная среда, разработанная дизайнерами.

Неделю потратил на выяснение вопроса почему в ассемблере для PowerPC регистры называются r0,r1,..,r31, а ассемблер таких названий не понимает. Говорит “unsupported relocation against Rx”. Я вообще в принципе эту фразу не понимаю, что они хотели этим сказать?

Оказалось, что ему надо сказать, чтобы он такие названия понимал. Специальной директивой “-mregnames”. Причём, эту директиву надо задать не только ассемблеру, но и компилятору GCC (спрашивается, зачем си-компилятору директивы ассемблера?). Почему эта директива не выставляется автоматически – тоже тот еще вопрос. Видимо потому, что сами Xilinx’овцы своим поделием не пользуются. Во всяком случае мне трудно поверить, что они оперируют не названиями регистров, а адресами, где эти регистры находятся. Тут еще есть тот прикол, что, к примеру, SP (Stack Pointer – указатель стека) и регистр R1 – это одно и то же…

В эклипсе больше всего выбешивает запуск дебаг-сессии. Никогда не знаешь запустится она или нет. И не подаст ли она при старте полный хардверный ресет ПЛИСу, затирая сконфигурённый процессор, чтобы потом удивлённо так сказать окном на пол-экрана “А где же процессор?”.

Справедливости ради, один раз мне удалось пройти весь этот форт Боярд не уткнувшись ни в одну ошибку. И FreeRTOS у меня таки заработал. Но это было один раз, неделю назад. И второй раз повторить тот же путь у меня пока не получилось.

Sony PRS-T1

Купил себе читалку. Sony PRS-T1. Подкупило наличие в кишках Андроида.

Прошил кастомизированной прошивкой с добавлением своей программы. Работает! Но так же, как и на Samsung Galaxy Note – не на полный экран почему-то. Теперь то уж точно придётся разбираться с этим глюком.

Вообще, устройство – то, о чём я мечтал. Они совместили e-ink и Андроид! То есть, в отличие от планшета, не будет сжираться батарейка, но при этом большинство андроидных программ идут без проблем. И читать книжки при этом комфортно.

Забавно, какой-то тупой француз с IP 88.191.95.247 пытается меня поломать, наугад пробуя найти где же у меня на сервере установлен PhpMyAdmin. А также пытаясь найти украинскую заразу muieblackcat. Ну-ну, удачи ему…

Zhongwen Cards, лень и неуверенность

Предлагал же мне Ма-сяньшэн порекламироваться на Магазете. Посмотрел, там недавно как раз в комментах искали хорошую программу под Андроид – как раз прозвучало слово “трёхсторонность”. И было сказано, что русских программ можно не искать – типа русские разработчики не хотят ничего делать. Первой идеей было написать коммент, рассказать о своей программе. Второй идеей было воспользоваться предложением Ма-сяньшэна. А затем появился вопрос, страшный и рукоопускающий.

А оно мне надо?

Вот так этот вопрос звучит. Программу я писал в первую очередь для себя и под себя, зарабатывать с её помощью не планирую. А вот поток негатива поиметь через это дело – легко. Потому что не бывает вещей, удобных всем. Поговорка японская такая есть, 十人十色 – читается “дзюнин то:иро”, десять человек – десять цветов. То есть, на вкус и цвет все фломастеры разные…

В общем, скорей всего предложением воспользуюсь, когда найду для этого сил и желания. Но не сейчас. А те люди пусть пользуются тем, что нашли – я для себя нашёл Android SDK и очень этим доволен :)

Свежая версия программы есть, но я её даю только при личном общении. Потому что я сволочь, да. И жлоб.

В чём отличие между MIL-STD-1553 и MIL-STD-1533?

Ответ один – ни в чём. Второе – это написанное с опечаткой первое. Не бывает шины 1533! Справедливости ради, можно сказать, что документ под номером MIL-STD-1533 существовал, но он описывал стандарт на разъёмы с подпружиненными контактами, но впоследствии этот стандарт был отменён.

Пока что для аэроспейса и авионики есть только MIL-STD-1553 (он же “ГОСТ Р 52070-2003″), ARINC 429, IEEE1355 (он же SpaceWire). Ну, и какие-то несознательные личности ещё пытаются туда CAN присобачить…