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

Quasar

Свой
  • Постов

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

  • Посещение

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

    4

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


  1. Функция остается в одном экземпляре :). Просто кусок кода во флешь. А локальные переменные в ней находятся в своем потоке (в стеке конкретной задачи). При переключении контекста двух этих задач они будут иметь значения текущей задачи и их значения ни как не связаны со значениями параллельно выполняемых задач. А вот если их сделать static то тогда, они начнут вести себя как глобальные переменные в плане много поточности. А функция RadiomModemSubsystem написана странно, почему нельзя сразу передавать ей queue и dataBuf? Нафига этот switch нужен?
  2. Но только вот бред нести не надо. Все будет работать... А что значит убрать, вам пояснили:
  3. Так вопрос-то был какой? И вы ответили: Для чего нужен R4 выше уже писали, для ликвидации земленных петель. Если его убрать может появится фон при подключении к предварительному усилителю, особенно если длина проводов большая.
  4. Отрицательное смещение n-p-n транзистора в 30 мВ ? Пардон, зачем? Во многих схема резистора R4 нет и все замечательно работает. yakub_EZ правильно написал.
  5. Web-интерфейс

    Нет, JS движок у каждого браузера свой, но есть стандарт, и если код писать не юзая специфичных браузерных фич, то JS код исполняется одинаково на всех браузерах, на этом весь Web стоит, как по другому? (ну исключение разве что IE6, который все убивают, но ни как не убьют). Если на странице 1-2 кнопки то может быть (хотя лично для меня и это спорно :) ), но когда настроек достаточно много, то... :)
  6. Web-интерфейс

    Для начинающих конечно сойдет, но поскольку сейчас 21 первый век, то лучше html странички делать статическими, а cgi-скрипты должны обмениваться с браузером xml или JSON данными в фоновом режиме (AJAX). Реализуя AJAX можно получить действительно неплохой результат и полноценный интерфейс пользователя для устройства, в браузере. Что самое главное, что AJAX решение в принципе более правильное и простое, так железка динамично формирует только коротки xml файлы (или JSON они еще короче), а не парсит все выдаваемые страницы, в поисках мест куда поставить динамические данные. Единственный минус, это то что надо знать JavaScript. :(
  7. В статье написано проверить правильность установки вводом: arm-kgp-eabi-ld -v arm-kgp-eabi-gcc -v arm-kgp-eabi-gdb -v А в архиве прилагаемом, лежать: arm-kgp-elf-ld -v arm-kgp-elf-gcc -v arm-kgp-elf-gdb -v
  8. Столкнулся с проблемой, не получается запустить DMA на LPC2478 и LPC2378. Не хочет работать с SSP1, хотя с SSP0 работает нормально. Причем ошибки в инициализации SSP нет, так как при работе SSP1 с такой же конфигурацией но без DMA, все ok. char dma_src[sSP_BUFSIZE] __attribute__((at(0x7FD00000))); char dma_dst[sSP_BUFSIZE] __attribute__((at(0x7FD01000))); static DWORD SSP1Init( void ) { BYTE i, Dummy = Dummy; /* enable clock to SSP1 for security reason. By default, it's enabled already */ PCONP |= (1 << 10); PINSEL0 &= !( 0xFF << 12 ); PINSEL0 |= ( 0xAA << 12 ); /* Set DSS data to 8-bit, Frame format SPI, CPOL = 0, CPHA = 0, and SCR is 15 */ SSP1CR0 = 0x0707; /* SSPCPSR clock prescale register, master mode, minimum divisor is 0x02 */ #if LOOPBACK_MODE SSP1CPSR = 0x2; #else /* Much slower clock is needed in order to test serial EEPROM. */ SSP1CPSR = 0x40; #endif for ( i = 0; i < FIFOSIZE; i++ ) { Dummy = SSP1DR; /* clear the RxFIFO */ } if ( install_irq( SSP1_INT, (void *)SSP1Handler, HIGHEST_PRIORITY ) == FALSE ) { return (FALSE); } /* Device select as master, SSP Enabled */ #if LOOPBACK_MODE SSP1CR1 = SSPCR1_LBM | SSPCR1_SSE; #else SSP1CR1 = SSPCR1_SSE; #endif /* Set SSPINMS registers to enable interrupts */ /* enable all error related interrupts */ SSP1IMSC = SSPIMSC_RORIM | SSPIMSC_RTIM; return( TRUE ); } /***************************************************************************** ** Function name: LoopbackTest ** ** Descriptions: Loopback test ** ** parameters: None ** Returned value: None ** *****************************************************************************/ void DMATest( void ) { DWORD i; volatile DWORD cnt; PCONP |= (1 << 29); /* Enable GPDMA clock */ /* Ch0 set for M2P transfer from mempry to SSP1. */ GPDMA_CH0_SRC = (unsigned long)dma_src; GPDMA_CH0_DEST = SSP1DR; /* The burst size is set to 8, the size is 8 bit too. */ /* Terminal Count Int enable */ GPDMA_CH0_CTRL = (SSP_BUFSIZE & 0x0FFF) | (0x02 << 12) | (0x02 << 15) | (0x01 << 26) | 0x80000000; GPDMA_CH0_CFG = (0x01 << 16) /* Lock bit */ | (0x01 << 15) /* Terminal count interrupt mask. */ | (0x05 << 11) /* Flow control and transfer type. M2P*/ | (0x00 << 6 ) /* Destination peripheral. */ | (0x02 << 1 ) /* SSP1 Tx. */ | (0x01 << 0 ); /* Channel enabled. */ /* Ch1 set for P2M transfer from SSP1 to memory. */ GPDMA_CH1_SRC = SSP1DR; GPDMA_CH1_DEST = (unsigned long)dma_dst; /* The burst size is set to 8, the size is 8 bit too. */ /* Terminal Count Int enable */ GPDMA_CH1_CTRL = (SSP_BUFSIZE & 0x0FFF) | (0x02 << 12) | (0x02 << 15) | (0x01 << 27) | 0x80000000; GPDMA_CH1_CFG = (0x01 << 16) /* Lock bit */ | (0x01 << 15) /* Terminal count interrupt mask. */ | (0x06 << 11) /* Flow control and transfer type. P2M*/ | (0x00 << 6 ) /* Destination peripheral. */ | (0x03 << 1 ) /* SSP1 Rx. */ | (0x01 << 0 ); /* Channel enabled. */ GPDMA_CONFIG = 0x01; /* Enable DMA channels, little endian */ while ( !(GPDMA_CONFIG & 0x01) ); if ( install_irq( GPDMA_INT, (void *)DMAHandler, HIGHEST_PRIORITY ) == FALSE ) { while (1) /* PANIC */; } /* Enable DMA TX and RX on SSP1 */ SSP1DMACR = 0x03; cnt = 0x10000; while ( cnt-- ) ; /* verifying, ignore the difference in the first two bytes */ for ( i = 0; i < SSP_BUFSIZE; i++ ){ if ( dma_dst[i] != dma_src[i] ){ while (1) /* PANIC */; /* Verification failed */ } } return; } void SSP1Send( BYTE *buf, DWORD Length ) { DWORD i; BYTE Dummy = Dummy; for ( i = 0; i < Length; i++ ) { /* Move on only if NOT busy and TX FIFO not full. */ while ( (SSP1SR & (SSPSR_TNF|SSPSR_BSY)) != SSPSR_TNF ); SSP1DR = *buf; buf++; #if !LOOPBACK_MODE while ( (SSP1SR & (SSPSR_BSY|SSPSR_RNE)) != SSPSR_RNE ); /* Whenever a byte is written, MISO FIFO counter increments, Clear FIFO on MISO. Otherwise, when SSP0Receive() is called, previous data byte is left in the FIFO. */ Dummy = SSP1DR; #else /* Wait until the Busy bit is cleared. */ while ( SSP1SR & SSPSR_BSY ); #endif } return; } /****************************************************************************** ** Main Function main() ******************************************************************************/ int main (void) { DWORD i; SSP1Init(); while (1) { for ( i = 0; i < SSP_BUFSIZE; i++ ) { dma_src[i] = 0xAA; dma_dst[i] = 0x00; } DMATest(); //SSP1Send( ((BYTE *)DMA_SRC), SSP_BUFSIZE ); } }
  9. Он пытается открыть STDIN/STDOUT/STDERR, только почему она у вас SWI вызывает я чего-то не пойму. Можно реализовать функции: #pragma import(__use_no_semihosting_swi) int _sys_open(const char *name,int mode); int _sys_close(FILEHANDLE fh); int _sys_write(FILEHANDLE fh, const unsigned char * buf,unsigned len, int mode); int _sys_read(FILEHANDLE fh, unsigned char * buf,unsigned len, int mode); Сделайте их пустыми, возвращающими 0 должно начать доходить до main.
  10. Запустил eCos на LPC2478, в eCos родной EMAC драйвер использует у меня для передачи пакетов, внешнюю SRAM память, при передачи наблюдается Underrun ошибка, если поиграться с инициализацией SRAM, то получается добиться улучшения картины, но все равно, передача хоть и идет, но очень медленно. Плата используется starterkit.ru MLPC2478. Шина памяти инититься так: volatile cyg_uint32 regval; HAL_WRITE_UINT32(EMC_BASE + CYGARC_HAL_LPC24XX_REG_EMC_CTRL, CYGARC_HAL_LPC24XX_REG_EMC_CTRL_EN); hal_lpc_set_power(CYNUM_HAL_LPC24XX_PCONP_EMC, 1); HAL_WRITE_UINT32(PIN_BASE + CYGARC_HAL_LPC24XX_REG_PINSEL8, 0x55555555); HAL_READ_UINT32( PIN_BASE + CYGARC_HAL_LPC24XX_REG_PINSEL9, regval); regval &= 0xCFCCFFC0; HAL_WRITE_UINT32(PIN_BASE + CYGARC_HAL_LPC24XX_REG_PINSEL9, (regval | 0x10110015)); HAL_READ_UINT32( PIN_BASE + CYGARC_HAL_LPC24XX_REG_PINSEL6, regval); regval &= 0xFFFF0000; HAL_WRITE_UINT32(PIN_BASE + CYGARC_HAL_LPC24XX_REG_PINSEL6, ( regval | 0x00005555 )); HAL_WRITE_UINT32(EMC_BASE + CYGARC_HAL_LPC24XX_REG_EMCS_WAITW_EN0, 0x00); HAL_WRITE_UINT32(EMC_BASE + CYGARC_HAL_LPC24XX_REG_EMCS_WAITO_EN0, 0x00); HAL_WRITE_UINT32(EMC_BASE + CYGARC_HAL_LPC24XX_REG_EMCS_WAITRD0, 0x01); HAL_WRITE_UINT32(EMC_BASE + CYGARC_HAL_LPC24XX_REG_EMCS_WAITPAGE0, 0x00); HAL_WRITE_UINT32(EMC_BASE + CYGARC_HAL_LPC24XX_REG_EMCS_WAITWR0, 0x00); HAL_WRITE_UINT32(EMC_BASE + CYGARC_HAL_LPC24XX_REG_EMCS_WAITTURN0, 0x00); HAL_WRITE_UINT32(EMC_BASE + CYGARC_HAL_LPC24XX_REG_EMCS_CONFIG0, 0x00000000); Если вести передачу из Ethernet RAM то ни каких проблем нет, но хочется все-таки разобраться с работой из SRAM.
  11. Можно Dev-C++ использовать для изучения, оно на gcc основано http://www.bloodshed.net/devcpp.html
  12. Ни чего он такого не объявлял. Вот именно. Возмите, да под какой-нибудь системой(которая способна ошибку сегментации выдать) соберите код: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void){ int i,*arr[10],*arr2[10]; printf("Part 1\n"); for (i = 0; i < (sizeof(arr)/sizeof(int*));i++){ printf ("i = %d\n",i); arr[i] = (int*)malloc(sizeof(int)); *arr[i] = i; } for (i = 0; i < (sizeof(arr)/sizeof(int*));i++){ printf ("n = %d\n",*arr[i]); } printf ("Part 2\n"); for (i = 0; i < (sizeof(arr2)/sizeof(int*));i++){ printf ("i = %d\n",i); *arr2[i] = i; } return 0; } VladimirYU Проблема где-то не в массиве.
  13. VladimirYU привели бы весь код, или подробнее объясните, что значит программа ведет себя как будто создан только один объект? Судя по вашему коду, все должно работать корректно.
  14. Вопрос по стеку uIP

    Конечно, должно быть так: :)
  15. Вопрос по стеку uIP

    HTTP 1.0 используется - после передачи страницы соединение должно закрыться. Добавьте: Connection: close\r\n к заголовку ответа. И я не совсем понял, чего написано перед !DOCTYPE htm... на самой страничке.
  16. Есть eCos 3.0 с TCP/IP стеком, есть поток работающий с консолью, он получает строчки с терминала, как-то там их обрабатывает и шлет в консоль ответ, получает он эти строчки fgets()'ом. Когда поток входит в fgets контекст перестает переключаться, железка не пингуется... Почему так? Во FreeRTOS вне зависимости от приоритетов такого не было, во FreeRTOS задача блокировалась и просыпалась лишь тогда когда приходил очередной символ, здесь при ожидании очередного символа все тупо останавливается. Если запустить поток, не вызывающий fgets, контекст нормально переключается.
  17. Вопрос по стеку uIP

    Не совсем понятно в чем проблема... Если в том, что клиент не понимает что за фаил ему прислали, до добавьте в http заголовок это: "Content-Type: image/x-icon\r\n" Сам сервер, по своей инициативе ни чего не отправляет, клиент шлет запрос на получение странички, сервер отдает страницу, если браузер на этой странице находит ссылку на иконку, то он шлет второй запрос на получение этой иконке... При втором запросе ico файла откроется соединение заново, сервер-то продолжает слушать http порт...
  18. Я посмотрел и даже прилепил к FreeRTOS. Пока впечатление только положительные. :)
  19. package javamyapp; public class Main { public int foo(int x,int y){ return (x + y); } public static void main(String[] args) { System.out.println("Result - " + (new Main()).foo(25,48)); } } А вообще Bruce Eckel - Thinking in Java...
  20. Всё сходится, если не откидывать FCS, то длину пакета ищут как size + 1 (так как в StatusInfo длина хранится как -1), а что бы откинуть FCS надо три вычесть из того что в StatusInfo хранится...
  21. В StatusInfo хранится (длина полученного пакета) - 1, то есть ethernet заголовок + верхние протоколы + FCS (4 байта), вот, минусуя 3, FCS и откидывают....
  22. библеотеки SNMP

    Вот здесь я выкладывал проект lwIP под uVision, правда с FreeRTOS. http://electronix.ru/forum/index.php?s=&am...st&p=435397
  23. Здесь я выкладывал порты под Keil. http://electronix.ru/forum/index.php?showtopic=26563&hl=
  24. Ну вот у меня эта халтура и используется :) . Фрейм принимается с битым CRC и неверной длинной. На битый CRC кладётся...неверная длина передается выше...ну и отваливается на каком-нибудь TCP или при просчете CRC в ICMP... Сейчас на своей плате поправил это дело, теперь всё OK :) .
×
×
  • Создать...