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

    

jenya7

Участник
  • Публикаций

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

  • Посещение

Весь контент jenya7


  1. Странное предупреждение

    Есть такая строчка в коде for (i=0; i < size_to_take; i++) { DataBuffer[i] = (data_out[j++]<<8) | data_out[j++]; } Выскакивает предупреждение В GCC компайлере такого предупреждения нет.Что надо переделать чтоб предупреждение исчезло?
  2. К сожалению нет отдельной ветки по теме. Мне кажется назрела ситуация когда нужно создать. А вопрос такой. Нужно где то создать SharedPreferences sys_params; SharedPreferences.Editor sys_params_editor; sys_params = getApplicationContext().getSharedPreferences("MyAppData", 0); sys_params_editor = sys_params.edit(); И потом в одной активити сохранять sys_params_editor.putString("DEV_NAME", dev_name); А вдругой активити читать device_name = sys_params.getString("DEV_NAME", "HC-06"); Не удается сделать глобальные объекты которые видны в обоих активити.
  3. Установил на Windows QT. Написал в QT програмку. А как ее скомпилировать под Linux? Поиски в гугле не радуют. Подозреваю что это невозможно.
  4. так они утверждают что он таки кроссплатформенный. в этом вся фишка. ну ладно не под все. под дебиан или юбунуту можно? это как бы маст.
  5. ничего не понял. среда разработки и компилятор установлены иначе как я програму написал. я так понимаю что если среда предоставляет кросплатформенную компиляцию - идешь в какой нибудь buid->options, выбираешь под что компилировать, жмешь на кнопку и имеешь счастье.
  6. W5300 инициализация

    а почему не воспользоваться рабочим алгоритмом, который я предоставил?
  7. W5300 инициализация

    посмотрите Sn_SR (Socket n Status Register). если сокет открыт он должен вернуть 0x22 SOCK_UDP This indicates Socket n is opened in UDP mode
  8. Есть два массива. Я их получаю из двух разных потоков. В table1.items элементы приходят сразу всем списком из 12 элементов. В table2 элементы приходят по одному. Мне нужно по ключу(reference_number) найти и переписать поле(priority_level) во всех элементах в table2. Делаю так. Но за время поиска в цикле приходят новые данные в table1.items и я отправляю пару пакетов(table2) со старыми данными. Возникла мысль реализовать hashtable. посмотрел реализации hashtable штук 20. Ни одна не понравилась. Нет детерминизма. Каждый malloc должен иметь свой free. А тут я рискую остаться с кучей мусора и фрагментированной памятью. Есть алгоритм вычисления уникального индекса хэш таблицы по ключу? (idx = hash(key))
  9. То что написано не подходит. Допустим я получил table1.items - и все 12 элементов поместил в хэш таблицу //insert (key, value) insert(table1.items[0].reference_number, table1.items[0].priority_level); //malloc ................................................................................................. insert( table1.items[11].reference_number, table1.items[11].priority_level); //malloc приходят элементы //value = get(key) table2[idx].priority_level = get(table2[idx].reference_number); delete(table2[idx].reference_number) //free но элемент может быть удален из table2 за ненадобностью. и он никогда не обратиться к хэш таблице и не освободит память выделенную под него. Весь алгоритм такой. 1. Пришел список table1.items 2. По принятию списка иду в массиве table2 - ищу reference_number в списке table1.items и если нашел обновляю priority_level. я тут подумал... я ведь при удалении элемента из table2 могу вызвать delete(table2[idx].reference_number). но мне не нравиться неопределенность. сколько узлов будет выделенно? сколько элементов в каждом узле если индекс хэш таблицы не уникален?
  10. W5300 инициализация

    я не понял вы сокет открываете? (socket(sn, Sn_MR_UDP, port, 0x00)). что показывает Sn_SR?
  11. W5300 инициализация

    вот мой тестовый мейн void main() { GPIO_Setup(); USART_Setup(USART1, 921600); SPI_Setup(SPI1); DWT_Init(); WIZNET_Init(); while(1) { //WIZNET_RunTcpServer(SOCK_TCPS, g_data_buff, PORT_TCPS, &g_size); WIZNET_RunUdpServer(SOCK_UDPS, g_data_buff, PORT_UDPS); } } Со стороны компьютера запускаю Hercules.
  12. IAR опять чудит

    кусок кода if (ack == 1) { value = (RxMessage.Data[1] << 8) | RxMessage.Data[0]; Parser_SendInt(COM_USART, value, 1, 0); break; } Если ставлю точку останова на value = (RxMessage.Data[1] << 8) | RxMessage.Data[0]; - получаю правильное значение на выходе. Без точки останова - получаю 0. И не важно value локальная или глобальная переменная.
  13. На пин приходят пульсы. Мне их надо посчитать за определенный период. entity FCOUNTER is port( RST :in std_logic; CLK :in std_logic; FREQ_IN :in std_logic; PERIOD :in Std_logic_vector(15 downto 0) := X"03E8"; --1000 COUNTER :out Std_logic_vector(31 downto 0) ); end FCOUNTER; architecture STRUCTURE of FCOUNTER is signal ms_clock :std_logic := '0'; signal reset :std_logic := '0'; signal f_count : std_logic_vector(31 downto 0) := (others=>'0'); signal ms_count : std_logic_vector(15 downto 0) := (others=>'0'); signal count : std_logic_vector(31 downto 0) := (others=>'0'); signal clk1 : std_logic := '0'; signal clk2 : std_logic := '0'; signal clk3 : std_logic := '0'; signal clk4 : std_logic := '0'; begin clk3 <= not clk1 and clk2; process(FREQ_IN, reset) begin if (rising_edge(FREQ_IN)) then f_count <= f_count + '1'; end if; if (reset = '1') then COUNTER <= f_count; --ticks per period f_count <= (others=>'0'); end if; end process; process(CLK) --100 Mhz begin if (rising_edge(CLK)) then count <= count + '1'; --49999 if (count = X"0000C34F") then --50000 - 500us count <= (others=>'0'); ms_clock <= not ms_clock; --tick 500us end if; if (clk3 = '1') then ms_count <= ms_count + '1'; if (ms_count = PERIOD) then --milliseconds ms_count <= (others=>'0'); reset <= '1'; end if; end if; if (reset = '1') then --do it one clock reset <= '0'; end if; end if; end process; process(CLK) begin clk1 <= ms_clock; clk2 <= clk1; end process; end STRUCTURE; Смотрю на Сигнал Тап reset не изменяется. Что тут не так?
  14. W5300 инициализация

    Вот рабочий пример. UDP и TCP. Только в дефайнах поставьте W5300, я работаю с W5500 Wiznet.zip замените w5500.c w5500.h на w5300.c w5300.h w5300.c w5300.h
  15. W5300 инициализация

    а почему вы не пользуетесь их библиотекой? у них очень хорошо все расписано и настроено.
  16. SPI и DMA

    Мне нужно переслать по SPI большой блок данных (4096 байт). Я нашел пример void vfnInitDMA_SPITxMstr(void) { SIM->SCGC6 |= SIM_SCGC6_DMAMUX_MASK; SIM->SCGC7 |= SIM_SCGC7_DMA_MASK; /******************************************************************************** **************************************************/ /******************************************************************************** **************************************************/ /* Look for the DMA request sources table on your RM for a complete list of available sources */ DMAMUX->CHCFG[0] |= DMAMUX_CHCFG_ENBL_MASK | DMAMUX_CHCFG_SOURCE(17); //SPI0 TX /*start the sequence*/ //DMA_ERQ |= DMA_ERQ_ERQ0_MASK; /* This example has no table of data to */ /* transfer, making only a single minor loop necessary to complete a major loop */ DMA0->TCD[0].SADDR = (uint32_t)&MstrDataSend_Buff; //Source address /* Destination address */ DMA0->TCD[0].DADDR = (unsigned long)(&SPI0->PUSHR); // /* Source offset disabled */ DMA0->TCD[0].SOFF = 0x04; /* Source and Destination Modulo off, source and destination size 2 = 32 bits */ DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(2) | DMA_ATTR_DSIZE(2); /* Transfer 4 bytes per transaction */ DMA0->TCD[0].NBYTES_MLNO = 0x04; /* No adjust needed */ DMA0->TCD[0].SLAST = -32; /* Destination offset disabled */ DMA0->TCD[0].DOFF = 0x00; /* No link channel to channel, 1 transaction */ DMA0->TCD[0].CITER_ELINKNO = DMA_CITER_ELINKNO_CITER(8); /* No adjustment to destination address */ DMA0->TCD[0].DLAST_SGA = 0; DMA0->TCD[0].BITER_ELINKNO = DMA_BITER_ELINKNO_BITER(8); DMA0->TCD[0].CSR = DMA_CSR_INTMAJOR_MASK | DMA_CSR_DREQ_MASK; } Есть пара непонятных моментов. DMA0->TCD[0].ATTR = DMA_ATTR_SSIZE(2) | DMA_ATTR_DSIZE(2); - это размер единичной посылки или размер всего блока? где задается размер пересылаемого блока?
  17. SPI и DMA

    я очень далек от Гуру. я бы отменил автоматическое присвоение регалий.
  18. SPI и DMA

    спасибо.
  19. Android + ESP8266

    Не нашел куда воткнуть тему. Попробую тут. Я хочу со стороны эмбедед поставить модуль ESP8266 и со стороны телефона управлять устройством. Первый вопрос – какое подключение лучше выбрать со строны ESP8266? Сейчас я делаю так – со стороны эмбедед конфигурирую ESP8266 // Set wifi mode AT+CWMODE=3 // softAP+station mode // Enable multiple connection AT+CIPMUX=1 // Setup server AT+CIPSERVER=1 // default port = 333 На компьютере открываю Hercules подключаюсь и посылаю команды. Вобщем то работает надежно, сбоев пока не замечал. Мне кажется это самый простой способ. Вопрос в надежности. Как проверять живое ли соединение? Вопрос второй – каким способом подключиться к ESP8266 через андроид. Они предоставляют класс WiFi Direct но я как то не понял - через него можно подключиться к серверу?
  20. Android + ESP8266

    сделал простенький тест Выбираю в WIFI List мой модуль, подключаюсь. При нажатии на кнопки Connect и Send таски бегут без исключений, получаю статус "Connected :) !" и "Send OK!" но дата на ESP8266 не приходит. блин. работает. нужно dataOutputStream.writeBytes(data_to_send); вместо dataOutputStream.writeUTF(data_to_send);
  21. SPI и DMA

    размер транзакции это количество байт на посылку? а если мне надо послать 4096 байт?
  22. Android + ESP8266

    в данном случае не хочу усложнять. нужно сделать максимально просто и быстро для пользователя. для обслуживающего техника можно и http сделать. тут есть еще одно обстоятельство. если пользователь захотел добавить/заменить модуль - взял из коробки воткнул и работает. а в случае с nodeMCU мне нужно прошивать, потом програмировать через определенную среду, потом посылать куда то.
  23. Android + ESP8266

    я когда открываю в телефоне WIFI вижу в списке мой модуль ESP8266. нажимаю Connect и он подсоединяется. то есть теперь я могу работать на уровне сокетов? try { socket = new Socket(dstAddress, dstPort); dataOutputStream = new DataOutputStream( socket.getOutputStream()); dataInputStream = new DataInputStream(socket.getInputStream()); if(msgToServer != null){ dataOutputStream.writeUTF(msgToServer); } ----------------------------------------