В продолжении поста об этом и вот этом. Хотим рассказать чуть-чуть себе и нашим читателям почему и зачем мы собираемся прекратить использование плат на процессорах архитектуры Intel (Российского производства). Пока это касается только наших проектов в области энергетики, а дальше посмотрим. Процессорная плата сопоставимая по стоимости с дизельным двигателем это не то, что необходимо российским ВС в XXI [...]
Разработка
Как известно, в своих новых микроконтроллерных разработках КБ 13 отказалось от старой проверенной АтМеги в пользу гипернанотехнологичных процессоров AVR32.
В процессе работы с этими процессорами, мы столкнулись с различными багами. Что, в принципе, неудивительно при плотном общении с любой «новинкой»...
Один из багов был связан с usart в режиме rs-485.
В процессе игр с атмелевской новинкой at32uc3a натолкнулись на интересное.
При объявлении глобального массива (или структуры) в начале программы (где-нить в районе мэйна — т.е., в итоге, по небольшим адрискам) и последующей попытке с-memcpy-ать в нее что-нибудь, проц ведет себя малость неадекватно.
Либо виснет, либо контроллеры периферии начинают глючить — неправильное чтение сдрама, висы усарта...
Небольшое гугленье показало,что мы не [...]
В продолжение.
Таки созрели написать нормальную функцию-конвертер
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/*
* swapBytes () — конвертирует порядок байт в буфере
* num — приведенный указатель на число
* n — размер в байтах
*/
int swapBytes(unsigned char * num, size_t n)
{
unsigned char tmp[n];
size_t cnt = n-1;
memcpy(tmp, num, n);
for(cnt=0; cnt<n; cnt++){
num[cnt] = tmp[(n-1)-cnt];
}
return 1;
}
Сопрягая разные железки, никогда не стоит забывать, что у каждого производителя свое королевство со своими правилами.
Если на AVR32 порядок байт — big-endian, то на x86 — интеловский, little-endian.
И, к примеру, тупо заслав от АЦП на cpc108 буфер unsigned short значений каналов, мы получим на процессоре совсем не то, что хотелось бы.
Магическая функция по конвертации из big-endian в [...]
Обнаружилась в АЦП нашем магия такая чуднАя — время от времени приходит от него на один байт больше, чем надо. Всегда в одном и том же месте, да один и тот же байт — \r. Вот оно как.
Колдунство это гадкое данные зело портило, и сумма контрольная сходилась плохо. Никак даже не сходилась, эх...
Грешили сначала на плату фаствеловскую [...]
Есть в фотоне такой виджет — PtList.
Собственно, предоставляет те же возможности, что и компонент с подобным названием в любой другой среде: формирование списков, получение индекса выбранных элементов и т.п.
Ну и, естественно, фотоновская фишка — создание на его основе других виджетов, наследующих те же свойства и возможности.
Как добавить в уже созданный экземпляр PtList список элементов? QSSL заботится о [...]
Существуют различные системы качества типа Оборонсертифика или ИСО. Понятно, что наличие у нас данных сертификатов не говорит заказчику ни о чем - за ними может скрываться многое, а может и ничего. Да и не дело Инженеров обсуждать эти бюрократические, но несомненно важные для нашей Мегакорпорации бумаги. Наше дело — закупить, запрограммировать или спроектировать уникальное оборудования, для обеспечения стопроцентого [...]
Забажил USART в режиме RS485. Непонятненько так забажил — то прерывания выдает, то не выдает, но стабильно забивает выделенный под прием буфер единичками.
Хорошо, что в буфере было сделано циклическое заполнение — до конца дошел, загоняйся с начала, а то программа падала бы без объяснения причин...
Многие недопрограммисты, привыкшие, что тонкие места в их программах отслеживает и запрещает компилятор, не любят С за то, что в нем есть магическая штучка — void *, с помощью которой возможны любые манипуляции с памятью. Например, он позволяет подобные фокусы:
1
2
3
4
5
6
7
8
9
10
int i=0,j=0;
signed short buff[16];
unsigned long adc_buff[16];
for(i=0,j=0;j<16;i+=2,j++){
memcpy( (void *)adc_buff + (i + bus_p->flags.adc_read_pass)*sizeof(signed short),
(void *)buff + j*sizeof(signed short),
sizeof(signed [...]
