roboforum.ru

Технический форум по робототехнике.

Michael_K - записки, чтобы не терялись...

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

Re: Michael_K - записки, чтобы не терялись...

Сообщение ALHIMIK » 07 окт 2010, 12:42

мда лекция по уфологии...
а я удевляюсь тому что вместо производственной практики у химика-технолога(!!!) перепись...
Аватара пользователя
ALHIMIK
 
Сообщения: 997
Зарегистрирован: 05 окт 2008, 14:41
Откуда: СПб
прог. языки: C,Python

Ширпотреб давит...

Сообщение Michael_K » 19 окт 2010, 03:42

Каких только штук раньше не делали.
LM1812 - практически готовый УЗ-радар
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Michael_K - записки, чтобы не терялись...

Сообщение Michael_K » 27 окт 2010, 15:23

О!!!
Приехали платы... вот эти...
Не прошло и года.

Красивые, заразы. Чуть позже сфоткаю.
g45_small.jpg
g45_small.jpg (42.03 КиБ) Просмотров: 2151
Последний раз редактировалось Michael_K 28 окт 2010, 07:52, всего редактировалось 1 раз.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Эрратомания...

Сообщение Michael_K » 28 окт 2010, 07:26

Ну и ошибки в процах пошли:

Errata sheet LPC2378 Rev. 08 — 1 April 2010 писал(а):EMC.1: Write operation cannot be performed on the external memory
bus
Introduction:
The External Memory Controller supports asynchronous static memory device support
including RAM, ROM, and flash, with or without asynchronous page mode.
Problem:
Write operation is not operational.
Work-around:
Using all the EMC pins as GPIO pins, the write operation can be simulated in software.


Этот проц выпускается уже года три-четыре... это так - для справки.
У меня уже даже матерных слов не хватает.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Michael_K - записки, чтобы не терялись...

Сообщение EdGull » 28 окт 2010, 07:31

тебе из-за этого не спится в такую рань? :D
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Michael_K - записки, чтобы не терялись...

Сообщение Michael_K » 28 окт 2010, 07:56

Я еще не ложился :)
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Michael_K - записки, чтобы не терялись...

Сообщение galex1981 » 28 окт 2010, 08:50

Плата действительно красивая!
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4362
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Michael_K - записки, чтобы не терялись...

Сообщение Сергей » 28 окт 2010, 09:03

А зачем делают ободки металлизации с отверстиями вокруг монтажных отверстий?
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: Michael_K - записки, чтобы не терялись...

Сообщение blindman » 28 окт 2010, 11:31

А что там за аудио гнезда? Под какой диаметр? Какая модель? Где брали? СМД? Ищу себе похожие, надо чтоб были как можно компактнее, и чтоб в будущем всегда купить можно было
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!

Аватара пользователя
blindman
 
Сообщения: 4130
Зарегистрирован: 29 апр 2008, 21:15
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич

Re: Michael_K - записки, чтобы не терялись...

Сообщение Michael_K » 28 окт 2010, 12:44

Там 8 слоев. Эти ободки соединены с "экраном". куча дырочек, чтобы металлизация не "терялясь" в процессе прикручивания.

Собирал не я - где брали не знаю, модель вот такая
http://www.brownbear.ru/goods/3048.html
Но вообще, аналоги называются как попало,
и я бы не сказал, что эти гнезда редкость -
проще в магазин прийти и пальцем показать, чем в инете искать.
http://www.chipdip.ru/product/st-021.aspx
http://www.comport.spb.ru/index.php?productID=1655
http://www.megachip.ru/item.php?item_id=135105
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Michael_K - записки, чтобы не терялись...

Сообщение EdGull » 28 окт 2010, 13:32

почем обошлась такая 8-ми слойная плата?
во сколько обошлась сборка?
Аватара пользователя
EdGull
 
Сообщения: 10211
Зарегистрирован: 28 дек 2004, 20:33
Откуда: Тольятти
Skype: Ed_Gull
прог. языки: Bascom AVR Basic
ФИО: Гуль Эдуард Викторович

Re: Michael_K - записки, чтобы не терялись...

Сообщение Michael_K » 28 окт 2010, 17:08

Заказывал не я, поэтому точно не скажу.
Примерно скажу:
Сама плата за штучные количества - 30-35 тыр. - это если с HAL (без золота)
Монтаж - тысяч 12-15 (Здесь еще сделан рентген-контроль - он там тоже заметно прибавляет).
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Michael_K - записки, чтобы не терялись...

Сообщение galex1981 » 28 окт 2010, 21:47

Золотая плата ;)!
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4362
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Michael_K - записки, чтобы не терялись...

Сообщение Michael_K » 28 окт 2010, 22:12

а тут задача конкурировать с кЕтайцами не стояла :)
штучный продукт... :)))
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

В мире жывотне...

Сообщение Michael_K » 08 ноя 2010, 14:42

Это фирменные примеры кода "от производителя" NXP-Keil.
Такое ощущение, что один индус портировал под кейл-арм код другого индуса,
который писал на перле для DSP :wink:

Файл размером под 50 килобайт вдохновляет изобилием и изощренностью глюков.
Задача под кодовым названием "найди двести ошибок".

Типично:

Код: Выделить всёРазвернуть
DWORD MCI_Send_ACMD_Bus_Width( DWORD buswidth )
{
  DWORD i, retryCount;
  DWORD respStatus;
  DWORD respValue[4];

  retryCount = 0x20;         /* reset retry counter */
  while ( retryCount > 0 )
  {
   if ( MCI_Send_ACMD() == FALSE )
   {
     continue;
   }   
   /* Send ACMD6 command to set the bus width */
   MCI_SendCmd( SET_ACMD_BUS_WIDTH, buswidth, EXPECT_SHORT_RESP, 0 );
   respStatus = MCI_GetCmdResp( SET_ACMD_BUS_WIDTH, EXPECT_SHORT_RESP, (DWORD *)&respValue[0] );
   if ( !respStatus && ((respValue[0] & (0x0F << 8)) == 0x0900) )
   {
     return ( TRUE );   /* response is back and correct. */
   }
   for ( i = 0; i < 0x20; i++ );
   retryCount--;
  }
  return( FALSE );
}


Переменная i используется для организации задержки... но компилятор ее оптимизирует, т.к. модификатор volatile тупо забыли. Если функция уходит в continue по первому условию, то RetryCount не работает и все висит.

Код: Выделить всёРазвернуть
  /* Due to reversed H/W logic in the MCB2300 board, the MCI power pin
  needs to be configured as GPIO pin that I need to set it active low manually,
  once it's set as MCI power pin, it will be active high. */
  /*connect MCI signals to P0.19-P0.22, and P2.11-P2.13*/
  PINSEL1 = 0x2A80;
  PINSEL4 = 0x0A800000;
#if MCB2300_VERSION_0
  SCS |= 0x08;
#if 0
  PINSEL1 = 0x2280;
  PINSEL4 = 0x0A800000;
  IODIR0 = 1 << 21;      /* MCI_PWR as GPIO output */
  IOCLR0 = 1 << 21;
#endif
#else
  SCS &= ~0x08;
#if 0
  PINSEL1 = 0x2A80;
  PINSEL4 = 0x0A800000;
#endif
#endif



Еще один вдохновляющий кусочек из того же файла. PINSEL - это регистр, где выбирается назначение ног порта. В данном случае используется простое присваивание, а не побитные операции, что автоматически отменяет все предыдущие настроки. Очень доставляет условная компиляция (типа тут компилируем, тут не компилируем, тут рыбу заворачивали), и блочные комментарии в каждой второй строке - это практически делает невозможным закомментить кусок кода для отладки.

Вообще, как собственно и следовало ожидать, любой инструмент в руках дикаря - грозное оружие. Так например, встречаются экземпляры кода написанные явно разбирающимися людьми... К сожалению, они настолько сосредоточены на _ЯКОБЫ_ хорошем _СТИЛЕ_ написания программы, что практически убивают прямой смысл программы.

Офигенно, например, вдохновляет практика перечислить директории инклюдов в мэйк-файле. В результате, если тебе нужно найти хеадер, ты будешь его искать по всем каталогам. Ничем, кроме "хорошего стиля программирования" невозможно объяснить славную традицию использовать разные типы в разных файлах - то есть в проекте тупо обьявляются BOOL, DWORD, UINT32, I32U, и даже my_unsigned_int, совершенно невзирая на то что это все одно и то же и портировать под принципиально другую систему это говно никто и никогда не будет (хотя бы просто потому, что файл относится к работе с конкретной периферией конкретного проца). Видимо из "хорошего стиля" растет и практика использования булевских значений:
Код: Выделить всёРазвернуть
#define TRUE  (1)
#define FALSE (0)

При этом охрененно занимательно отлавливать глюки. Почему-то ( :ROFL: ) вдруг оказывается, что
Код: Выделить всёРазвернуть
if (Flag == TRUE) {do_something();}
if (Flag != FALSE)  {do_something();}

это два совершенно разных действия.

А вот эта фишка - эта просто классика "хорошего стиля". Человек видимо очень старался, чтобы его код мог работать и так, и сяк, и об косяк... К сожалению, проверить разные комбинации условных дефайнов он не удосужился (хотя, честно говоря, на это не хватило бы и жизни - столько он их там наплодил).

Код: Выделить всёРазвернуть
#if MCI_DMA_ENABLED
   do {
      // TODO: avoid copy
      memcpy((void *)DMA_SRC, buff, 512);
      buff += 512;
      GPDMA_INT_TCCLR = 0x01;
      GPDMA_INT_ERR_CLR = 0x01;
      GPDMA_CH0_SRC = DMA_SRC;
      GPDMA_CH0_DEST = DMA_MCIFIFO;
      GPDMA_CONFIG = 0x01;
      /* Enable DMA channels, little endian */
      while ( !(GPDMA_CONFIG & 0x01))
         ;
      /* The burst size is set to 8, the size is 8 bit too. */
      /* Terminal Count Int enable */
      GPDMA_CH0_CTRL = (DMA_SIZE & 0x0FFF) | (0x04 << 12) | (0x02 << 15)
      | (0x02 << 18) | (0x02 << 21) | (1 << 26) | 0x80000000;
      //DMA_Move( 0, M2P );
      GPDMA_CH0_CFG |= 0x10001 | (0x00 << 1) | (0x04 << 6) | (0x05 << 11);
      /* Write, block transfer, DMA, and data length */
      DataCtrl |= ((1 << 0) | (1 << 3) | (DATA_BLOCK_LEN << 4));
#else
      /* Write, block transfer, and data length */
      DataCtrl |= ((1 << 0) | (DATA_BLOCK_LEN << 4));
#endif
      MCI_DATA_CTRL = DataCtrl;
      for (i = 0; i < 0x10; i++) {
         ;
      }
   } while (count--);

Невооруженным глазом видно, что если MCI_DMA_ENABLED не определено, то цикл не открывается, но закрывается...

Честное слово, иногда хочется руки оторвать этим "стилистам".
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Пред.След.

Вернуться в Блоги

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron