Перейти к содержанию
    

Shamil

Свой
  • Постов

    184
  • Зарегистрирован

  • Посещение

  • Победитель дней

    1

Shamil стал победителем дня 13 февраля

Shamil имел наиболее популярный контент!

Репутация

1 Обычный

Информация о Shamil

  • Звание
    Частый гость
    Частый гость
  • День рождения 15.10.1965

Информация

  • Город
    Array

Посетители профиля

6 562 просмотра профиля
  1. As shown for the 20Hz signal generator, may be applied to the telephone ringing system, the signal source can also be used for alarm systems and other electronic Used. The circuit is actually a transformer T and a transistor VTl, VT2 composition of total fat push-pull oscillator, two transistors working in the off state (saturation and cut-off), the output waveform is a square wave. Transistor low power consumption and high efficiency.Component selection: transistor VTl, VT2: 3DD4E, = 30 ~ 80 (parameter selection as consistent). Radiator area l00 50mm2, aluminum plate having a thickness of 2mm. Oscillation transformer T: using E-type silicon material, core cross-sectional area of 35 22mm2. Ll-3: µ0.49mm high strength wire, wound 189 turns. L4-6: µ0.25mm high strength wire, wound 40 turns, and all around the center wire taps. L7-8: µ0.35mm high strength wire, wound 60 turns. Choke coil L: using E-type silicon material, core cross-sectional area of 20 15mm2. L: µ0.55mm high strength wire, wound 800 turns. Resistor nominal power are selected 1 / 2W metal film resistors. Other component values as shown in the figure, no special requirements.
  2. Дополню makc: Вышеприведенная схема и проблемы с разводкой проектов относятся только к самому первому флешовому семейству ProAsicPlus. Это уже очень старые ПЛИС, их сейчас уже не купить я думаю. Последующие семейства (в том числе ProAsic3), имеют совсем другую схему ячейки (содержат тригер и 3-х входовой ЛУТ), и никаких проблем с разводкой любых проектов не возникает! Тем более современные ПЛИС семейства PolarFire (у них уже 4-х входовой ЛУТ перед тригером). ProAsic3, кстати, очень трудно купить в России (и цены просто космические), т.к. это тоже уже достаточно древние ПЛИС. Если уж брать Actel/Microsemi/MicroChip, то только PolarFire, хотя это тоже не дешево.
  3. J-Link

    У меня версия 4.58. В ней, на вкладке Production можно указать действия выполняемые при автоматическом программирования. Проверьте стоит ли у Вас галочка на пункте "Start Application".
  4. Спасибо за ликбез конечно. Но я то писал не про передачу строки/указателя в функцию, а про помещение в очередь строки или указателя. Сергей, я безмерно уважаю Вас и Ваш нелегкий труд по подержанию высокого профессионального уровня нашего форума, но в данном случае, Вы никак не улавливаете суть того, о чем я пишу (наверное я плохо объясняю). Попробую еще раз: - Очередь в FreeRTOS огранизована как простой кольцевой буфер, хранящий элементы фиксированного размера. Размер элемента и их максимальное количество задается при создании очереди. - Элементы помещаются в очередь побайтным копированием содержимого элемента в буфер очереди функцией memcpy. Следовательно чтобы поместить в очередь что либо (например указатель на строку, как желает топикстартер), это что то должно располагаться в памяти (чтобы можно было передать указатель на него). Расмотрим на примере того, что желает топикстартер: xQueueTCPRxedString = xQueueCreate( 2, sizeof( char *) ); kan35 создает очередь с максимальным количеством элементов 2, с размером элементов sizeof(char*). Не знаю какой размер указателя на строку в PIC-ах, но будем для определенности считать что 2 байта. char string_received[2][64]; char * data; data = string_received[0]; xQueueSend(xQueueTCPRxedString, &data, 0); Здесь в функцию xQueueSend передается указатель на локальную переменную data, которая содержит значение указателя на строку. Функция xQueueSend копирует 2 байта (т.к. при создании очереди был указан именно такой размер элемента) содержимого переменной data в буфер очереди, при этом в очереди оказывается значение указателя на строку, как и задумывалось. Все работает корректно. Никаких проблем с тем что в функцию передается указатель на локальную переменную не возникает, т.к. этот указатель нигде не запоминается, а используется только значение переменной, на которую он указывает. Теперь другой вариант: xQueueSend(xQueueTCPRxedString, string_received[0], 0); Здесь в функцию xQueueSend передается указатель на саму строку, и происходит копирование 2-х байт самой строки в буфер очереди, на что и жалуется топикстартер. Т.е. явно не то поведение, что требовалось. Вот и собственно и все, о чем я хотел сказать своими сообщениями. Я бы на месте топикстартера, сделал простую функцию-обертку для функции xQueueSend, которая помещала бы в очередь значения передаваемых ей указателей на строку. Что то вроде такого: portBASE_TYPE xQueueSend_My(xQueueHandle xQueue, char * pvItemToQueue, portTickType xTicksToWait) { char *tmpVar = pvItemToQueue; return xQueueSend(xQueue, &tmpVar, xTicksToWait); } Тогда можно будет указывать сразу указатель на строку: xQueueSend_My(xQueueTCPRxedString, string_received[0], 0); Без всяких вспомогательных переменных.
  5. Да это не мои записи, это из исходников FreeRTOS, которые я приложил. Топикстартер хочет класть в очередь не сами строки, а указатели на строки. Для этого эти указатели должны быть помещены в память, и в функцию xQueueSend должен передаваться указатель на место в памяти, где расположен этот указатель, который мы хотим положить в очередь.
  6. Там и нет синтаксической ошибки! Ошибка в использовании функции. Сергей, прочитайте мое предыдущее сообщение! В функцию должно передаваться не значение, помещаемое в очередь, а указатель на это значение! Я же прикрепил исходники этой функции из FreeRtos
  7. Второй аргумент функции xQueueSend - это указатель на место в памяти, где хранится то, что нужно положить в очередь. portBASE_TYPE xQueueSend( xQueueHandle xQueue, const void * pvItemToQueue, portTickType xTicksToWait ); Стало быть указатель на Вашу строку должен храниться где то в памяти, и в функцию xQueueSend надо передавать указатель на это место в памяти. Используется он только на время вызова этой функции, как второй аргумент функции memcpy: memcpy( ( void * ) pxQueue->pcWriteTo, pvItemToQueue, ( size_t ) pxQueue->uxItemSize ); Поэтому вполне допустимо использовать указатель на локальную переменную. В принципе, ничего не мешает сделать вам еще один массив с указателями на ваши строки, хранить его в статической памяти, если у вас такая странная проблема с локальными переменными. char string_received[2][64]; char *p_strings[] = {string_received[0], string_received[1]}; Возможно более опытные товарищи предложат лучший вариант... queue.h queue.c
  8. strlen() возвращает длину строки без завершающего нуля. Вот вы и создаете новую строку которая не завершается нулем. И получаете мусор в конце, который обрывается по какому то случайному нулю.
  9. Потому что отрицательное напряжение распределяется между "защитным диодом" и светодиодом оптопары трудно предсказуемым образом. Даже если распределиться поровну - будет достаточно для пробоя светодиода. Светодиод не выгорит конечно, т.к. диод защищает. Но этот режим явно не из числа допустимых.
  10. Нет у Actel такого! Вам придется самостоятельно заполнять блоки RAM содержимым таблиц при каждом включении питания. Да работаем постоянно. С такой проблемой как у Вас не сталкивались, правда и таблиц настолько больших не было. Самая большая табличка которая была: localparam COEF_WIDTH = 12; // Разрядность коэфициентов фильтра (включая знаковый разряд) localparam COEF_QN = 960; // Кол-во коэфициентов фильтра localparam COEF_TABLE_SIZE = COEF_QN / 2 + 1; // Размер таблицы коэфициентов фильтра localparam ACC_WIDTH = 20; // Разрядность аккумлятора фильтра wire [COEF_WIDTH-1:0]CoefTableTx[COEF_TABLE_SIZE-1:0]; assign CoefTableTx[ 0] = 12'h001; assign CoefTableTx[ 1] = 12'h001; assign CoefTableTx[ 2] = 12'h002; assign CoefTableTx[ 3] = 12'h002; assign CoefTableTx[ 4] = 12'h002; assign CoefTableTx[ 5] = 12'h002; assign CoefTableTx[ 6] = 12'h003; assign CoefTableTx[ 7] = 12'h003; assign CoefTableTx[ 8] = 12'h003; assign CoefTableTx[ 9] = 12'h003; // ............. assign CoefTableTx[474] = 12'h7AF; assign CoefTableTx[475] = 12'h7B1; assign CoefTableTx[476] = 12'h7B3; assign CoefTableTx[477] = 12'h7B5; assign CoefTableTx[478] = 12'h7B6; assign CoefTableTx[479] = 12'h7B6; assign CoefTableTx[480] = 12'h000;
  11. Память у Actel не сохраняет свое содержимое после выключения питания. Поэтому кто то ее все равно должен будет проинициализировать. Все равно придется табличку держать либо в ПЛИС, реализованную на логике, либо снаружи в чем то. Я думаю дизайнер пытается вытянуть временные ограничения и размещает все это так, что потом не может развести. Я бы попробовал разбить ваши таблицы на 4 или 8 поменьше размером, с защелками на выходах, с последующим объединением.
  12. Прикрепил файлик с содержимым 0-го канального интервала потока Е1. У меня просто только поканальный захват данных реализован. Чтобы получить полный поток Е1, надо после каждого байта моего файла вставить 31 байт с требуемым содержимым каналов. CRC4 конечно будет неправильным, но синхронизацию всю можно отладить. CRC4_KI0.zip
  13. Посмотрите как Viko реализует счетчик с дробным коэффициентом деления. Я думаю вам вполне подойдет. Надо только реализовать вычисление выражения, которое там константное: localparam X = ((1<<$clog2(N)) - N + M); В Вашем случае параметр M равен константе 6, а вот N будет переменным, равным содержимому count1.
  14. В одном корпусе по моему нет таких. На двух корпусах можно изобразить: Вариант Plain тоже годится, только сброс U2 надо брать с выхода U1:Q, тогда будет надежней!
  15. У нас стоит в нескольких блоках 5576ХС4Т с одной 5576РС1У. В описание, я думаю, просто дан пример объединения РС1. Например чтобы загружать несколько (три) 5576ХС4.
×
×
  • Создать...