32bit_me: (Default)

Originally published at 32 bit.me. You can comment here or there.

Не задумывались ли вы о том, как работает FPU процессора? Казалось бы, там всё довольно просто. Есть стандарт представления чисел с плавающей точкой, IEEE754, а сама реализация арифметических операций очевидна.
Но на самом деле, за кажущейся простотой скрыто множество нюансов.

Read more... )

Ссылка на гитхаб: https://github.com/arktur04/FPU

В репозитории содержится исходный текст программы генерации тестового файла (на C++, разработана в Linux, однако не содержит ничего Linux-специфического и должна собираться в любом компиляторе под Windows, возможно, с минимальными изменениями), сам тестовый файл, и программа-калькулятор, позволяющая переводить числа из hex-вида во float и наоборот и производить с числами арифметические действия (на С#, разработана в среде Visual Studio 2012).

По мере продвижения я буду пополнять репозиторий.

В следующий раз мы напишем простой тестбенч для операции деления.

Продолжение следует.

32bit_me: (Default)

Запись опубликована 32 bit.me. You can comment here or there.

ModbusEasy — моя утилита для работы с протоколом Modbus.

Утилита opensource, исходники и бинарники доступны для скачивания здесь: https://github.com/arktur04/modbuseasy/archive/master.zip.

Добавлены несколько команд:

getdb -a  -получить список всех переменных в текущей конфигурации

getdb <varname>  -получить текущее значение переменной

setdb <varname>  -установить текущее значение переменной

 

Также добавлено простое консольное приложение, работающее с modbuseasy в режиме slave. Оно изменяет по таймеру значения двух переменных и может использоваться как для тестирования приложений, работающих с протоколом Modbus в режиме master.

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

Все исходники на C#.

32bit_me: (Default)

Запись опубликована 32 bit.me. You can comment here or there.

Пусть есть следующая задача: нужно, чтобы форма приложения создавалась динамически в run-time, на основе конфигурационного файла, например, в формате xml. Подобные задачи могут решаться разными способами, например, с помощью XAML (основан на XML, технология Microsoft), или QML (основан на Java Script, технология Qt). Ниже приводится пример реализации такого подхода на основе XML и механизма Reflection, доступного в С#.

Итак, Reflection — это часть платформы .Net, позволяющая использовать метаданные сборки в run-time. Это означает, что мы можем создать экземпляр класса, зная его имя, и присвоить значения его свойствам, зная их имена и значения. Помимо перечисленного, Reflection включает в себя еще много возможностей, но пока нам хватит этих.

Далее под катом

Читать запись полностью »

32bit_me: (Default)

Запись опубликована 32 bit.me. You can comment here or there.

Написал простую утилиту для работы с протоколом Modbus. Утилита поддерживает работу как в режиме Master, так и в режиме Slave, что позволяет не только обращаться к устройству по шине Modbus, но и эмулировать устройство. Утилита пока поддерживает только протокол Modbus RTU, функции 1-6, 15, 16.

Графического интерфейса нет (и пока не предвидится), конфигурируется из файла xml, его структура проста и понятна, его легко можно править руками.

Пока функциональность утилиты минимальна, буду ее улучшать, когда будет на это время. В ближайших планах — поддержка Modbus TCP.

Утилита написана на C#.

Скачать исходники можно здесь: https://github.com/arktur04/modbuseasy

Ссылка на скачивание бинарника: https://www.box.com/s/ob8938m0cl93oglktnm6

 

32bit_me: (Default)

Запись опубликована 32 bit.me. You can comment here or there.

Сразу следует сказать, что русский перевод названия, мягко говоря, неточен. В оригинале книга называется «C# 3.0 In a Nutshell», авторы Joseph Albahari, Ben Albahari. Книга представляет собой прекрасный учебник по языку C#, и охватывает темы, начиная с основ синтаксиса, типов и переменных и заканчивая более сложными темами, такими как небезопасный код или препроцессорные директивы.

В книге нет описания Windows Forms и прочих примитивных вещей. Материал книги отличается глубиной и сложностью. Я рекомендую эту книгу всем, кто хочет использовать именно сложные особенности языка C# и платформы .Net, а не конструировать пользовательские интерфейсы из визуальных компонентов.

Есть и более новое издание этой книги, по версии языка C# 4.0.

32bit_me: (Default)

Запись опубликована 32 bit.me. You can comment here or there.

При попытке сериализации объекта с полем вида

public IPAddress ip

возникает Run-time error типа System.InvalidOperationException

Причина заключается в том, что класс IPAddress не имеет конструктора по умолчанию (parameterless ctor), необходимый для XML-сериализации, при этом то, что класс IPAddress имеет атрибут [SerializableAttribute], не имеет значения, т.к. этот атрибут действует только на binary и Soap-сериализацию.

Решается проблема, например, так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
 
using System.Xml.Serialization;
using System.IO;
 
namespace SerializationTest
{
    public enum MyEnum { enum1, enum2, enum3 }
 
    [Serializable]
    public class Test
    {
        public Test()
        {
            a = 1;
            b = true;
            s = "string";
            ip = IPAddress.Loopback;
        }
 
        public int a;
        public bool b;
        public string s;
        public MyEnum e;
 
        [XmlElement(ElementName = "IPAddress")]
        public string IPAddressAsString
        {
            get { return ip != null ? ip.ToString() : null; }
            set
            {
                IPAddress a;
                if (value != null && IPAddress.TryParse(value, out a))
                    ip = a;
                else
                    ip = null;
            }
        }
 
        [XmlIgnore]
        public IPAddress ip { get; set; }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test();
 
            XmlSerializer xs = new XmlSerializer(typeof(Test));
            FileStream writer = new FileStream("file.xml", FileMode.OpenOrCreate);
            xs.Serialize(writer, test);
            writer.Close();
        }
    }
}
32bit_me: (Default)

Запись опубликована 32 bit.me. You can comment here or there.

Программа для перевода изображений в массив С. Переводит изображение в массивы чисел 32 бита, 16 бит (5+5+5), а также 8 бит с палитрой (также создается массив палитры).

Загружаем картинку:

Выбираем палитру (если хотим сконвертировать изображение в 8-битный формат):

Получаем:

0x52, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0x49, 0xFF, 0xFF, 0x52, 0x09, 0xAD, 0xA4, 0x5B,
0xFF, 0xFF, 0xFF, 0xA4, 0x00, 0xF6, 0xFF, 0xAD, 0x09, 0x09, 0x09, 0x52, 0xAD,
0xFF, 0xFF, 0xF6, 0x00, 0x09, 0x09, 0x09, 0x00, 0xA4, 0xFF, 0xF6, 0x5B, 0x09,
0x49, 0x00, 0x5B, 0xF6, 0xFF, 0xFF, 0x52, 0x09, 0x09, 0x09, 0x09, 0x5B, 0xFF,
0xFF, 0xF6, 0x52, 0x09, 0x49, 0x00, 0xA4, 0xFF, 0xFF, 0xFF, 0xAD, 0x00, 0x09,

 

Язык C#, среда разработки Visual Studio 2010.

Ссылка для скачивания программы и исходников: https://bitbucket.org/arktur04/pictureencoder

32bit_me: (Default)

Originally published at 32 bit.me. You can comment here or there.

Для получения скриншотов с экранов устройств была разработана маленькая утилитка, получающая текущее изображение по Rs-232.

Сама утилитка написана на C#, в программу устройства был добавлен небольшой фрагмент, отправляющий в UART изображение из буфера:

switch(buf[1])
{
case 0x03: //read multiple holding registers (0x04)
  ...
  break;
//Другие команды Modbus
...
 
case 0xFF: //  Команда получения скриншота
 
...
  return PrintScreen(uartNum);
};

Таким образом, стандартные команды Modbus «расширяются» специальной командой с кодом 0xFF, при получении которой устройство посылает в порт копию экрана (для монохромного экрана 128*64 это составляет ровно 1 кбайт данных).

Утилитка очень простая, небольшое (но, как оказалось, легко решаемое) затруднение вызвал тот факт, что С# работает с COM-портом не так, как другие системы (например, Delphi).

C# создает отдельный поток исполнения для обработчика события приема сообщения COM-порта. А раз это отдельный поток, в нем нельзя отрисовывать изображение (операции с графикой не являются в .Net потокобезопасными).

Проблему можно решить двумя путями: верным и неверным.

Read the rest of this entry »

Profile

32bit_me: (Default)
32bit_me

July 2017

S M T W T F S
      1
2345678
9101112131415
16171819202122
232425262728 29
3031     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 21st, 2017 01:27 am
Powered by Dreamwidth Studios