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

Kalyan

Свой
  • Постов

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

  • Посещение

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


  1. да, вы правы. Первопричина найдена. Это как раз таки и DMA. Теряются байты с потока. Идет поток байт, заполняется буфер, дма останавливается, перекидает их со своего буфера в логику, потом опять начинает складывать байты с потока. Это узкое место в реализации, и с увеличением адреса буфера происходить задержка перед следующим включением дма, и оно теряет несколько байт (1 байт) с потока.
  2. Я думаю Вы в корне не правы. Есть правила этого форума. Вот ссылкочка. В правилах не написано что это закрытый клуб професиональных дядек к которому нету доступа лицам коие такими не являются. На главной странице тоже нету предупреждений о запрете задавать те или иные вопросы (типо "Ламер - иди отсюдова! Не пиши здесь постов" и тд.). Согласитесь, ведь тогда упадет трафик и будут изымать плату за доступ к ресурсу. Это свободный ресурс, Вы не есть владельцем ресурса (я надеюсь) и у меня здесь столько же прав сколько и у Вас. Следовательно, должен быть конструктив, а не хамское отношение и попытка навязывать свои нарцисссические представления (так написано в правилах). Если вопрос уже здесь неоднократно обсуждался - заблокируйте мой пост с самого начала. Или же в пример могу привести http://www.cyberforum.ru. Там в такой ситуации не оскорбляют своего пользователя, а приводят ссылки на подобные темы. Модераторов прошу обратить внимание на нарушения правил данного форума, а именно - оскорбления в мой адрес.
  3. Извините, а почему Ваш пост начинается с претензии? Хотите ЧСВ себе прокачать. Если Вы такой великий, зачем тратили свое драгоценное время чтоб отписать. Не царское это дело. У Вас наверняка есть дела поважнее. Это же форум, на то он и придуман чтоб здесь спрашивать и получать ответы. Давайте на главной странице большими буквами напишем "Читайте доки!!!" и все, и форум тогда и не надо. Еще бы рассказали как breakpoint юзать. На аватарках себе напишите "Читайте доки" чтоб не утруждать себя любимых ))
  4. да, курить маны это выход с любой ситуации. Тут не поспоришь. Хотелось бы понять как это делает сам линкер, когда я ему ничего не указываю. У меня просто есть границы RAM и модули с переменными, по каким правилам будут определяться адреса. Такой инфы с наскока не смог найти. Может Вы примерно можете подсказать название мануала или главы где бы об этом было написано. Спасибо
  5. да, я понимаю. По наследству досталась реализация сериал протокола. При сборке в моем проекте оно не работает. Заметил особенность - если приемный буфер этого протокола положить по младшим адресам - чудо, все работает )). Вот мне и в самом деле интересно стало как заставить линкер разложить переменные разных модулей в том или ином порядке. Какие правила использует линкер для этого и тд.
  6. Может есть несколько базовых правил? Например в зависимости где идет первое обращение к модулю, в зависимости от размера и дт.
  7. ок. спасибо. По какому закону линкер назначает переменной адрес в рам памяти? Например у меня есть два файла module1.c и module2.c. В этих файлах соответственно переменные uint8_t module1 = 0; module2 = 0; Листинг: // module1.c uint8_t module1 = 0; void module1_init(void) { module1 = 1; } // module2.c uint8_t module2 = 0; void module2_init(void) { module2 = 2; } // main.c void main(void) { module1_init(); module2_init(); while(1) { } } Какую переменную линкер положит по меньшему адресу и что на это влияет?
  8. Спасибо, работает вот так: define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; define symbol __ICFEDIT_region_RAM_end__ = 0x20017FFF; #pragma location= 0x20017BFF __no_init uint8_t my_arr[1024]; my_arr 0x2001'7bff 0x400 Data Gb main.o [1] Не возникнет ли проблем когда оперативная память заполнится до этого значения? Компилятор повторно по этому адресу уже не будет ложить остальных переменных?
  9. Добрый день. У меня есть некоторый массив. Например uint8_t my_arr[10*1024]. Можно ли заставить компилятор положить этот массив в начало или конец оперативной памяти?
  10. #define UIP_CONNS 15 Этого количества хватает на все соединения которые идут от браузера. Посмотрел загрузку самого жирного файла через Wireshark. Идут ре-трасмиты со стороны железки. Но документ оно загружает. На сколько это нормально?
  11. Физика, думаю, нормально работает, так как тот же веб сервер с примера - работает. Но там очень простой сайт. uIP взял чтоб сэкономить RAM память ))
  12. STM32f401 + uIPv 1.0 + Web Server

    Добрый день. Собрал систему из Nucleo STM32f401 и Enc28j60 шилда. Использую FreeRtos и uIP v 1.0. Система завелась, работает DHCP и одно клиентское подключение по TCP. Адаптировал пример веб сервера с uIP стека. Добавил туда свои веб странички. На страничках подключено несколько изображений и скриптов. Соответственно когда браузер это все начинает тянуть вместе - не все ресурсы страницы подгружаются. Если кто то работал с uIP и этим примером веб сервера, у вас наблюдались такие проблемы? Может ли этот веб сервер асинхронно обрабатывать запросы? Буду благодарен если поделитесь своим опытом
  13. BLE

    Да, извиняюсь, не нашел более подходящего места. Да, тут такая логика необходима: Центральное устройство периодически читает эту характеристику, там содержится статус некой операции. Если операция еще не завершилась, то эта характеристика должна быть пустая (data len = 0), то есть центральное устройство не должно получать вообще данных, а уже если операция завершилась, то в этой характеристике должен быть 2-х байтный статус. Вот исходя с этой логики хотел менять длину данных в характеристике.
  14. BLE

    Добрый день. Работаю с BLE - создаю BLE peripheral device. В GATT профайле определен один сервис в котором определена одна характеристика со свойством read. Эта характеристика описана двумя атрибутами (Declaration - uuid -0x2803 и само value c 16 байтным uuid). Вопрос относительно длины данных для атрибута value этой характеристики. Возможно ли как то указать что длина данных у этой характеристики переменная? Например инит длинна = 0 и максимальная длина = 2 байта.
  15. STM32f407 DMA2 M2M

    Очистка на уровень выше, в самом хендлере void TIMIMER_IRQ_Handler(void) { if (TIM_GetITStatus(DELAY_TIMER, TIM_IT_Update) != RESET) { timer_1ms_handler(); TIM_ClearITPendingBit(DELAY_TIMER, TIM_IT_Update); } }
  16. STM32f407 DMA2 M2M

    Добрый день. Управляю ТФТ дисплем напряую через FSMS. Заполняю буфер и через DMA2 M2M передаю его в FSMS. По окончанию передачи получаю прерывание TC, генерирую новый буфер и опять передаю через DMA. Все работает пока не вызываться обработчик прерывания от таймера. Если этот обработчик занимает определенное время то прерывание TC от дма не вызывается никогда, прерывания ошибок от дма тоже не приходят. В регистрах дма наблюдаю след состояния: LISR - флажков прерываний нету CR - EN включен и прерывание TC тоже включено. NDTR - количество байт уменьшилось на 20. то есть дма передало 20 байт FCR - FS (FIFO status) == 5 что означает что FIFO полная. Собственно не понятно почему дма перестает отправлять данные и заполняется его FIFO. Инит дма DMA_InitTypeDef DMA_InitStructure; // Deinitialize DMA Streams DMA_DeInit(DMA2_Stream0); // half_word_cntr*2 - size in byte // memory it is FSMC, DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord, 16b bus // Peripheral it is img frame buff, DMA_PeripheralDataSize_Byte - need for little endianformat on FSMC bus // Configure DMA Initialization Structure DMA_InitStructure.DMA_BufferSize = half_word_cntr*2; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Disable; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)data_p; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; DMA_InitStructure.DMA_Priority = DMA_Priority_High; // Configure TX DMA DMA_InitStructure.DMA_Channel = DMA_Channel_0; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToMemory; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)TFT_FSMC_BASE_ADDRESS; DMA_Init(DMA2_Stream0, &DMA_InitStructure); DMA_ClearFlag(DMA2_Stream0, DMA_FLAG_TCIF0); DMA_ClearITPendingBit(DMA2_Stream0, DMA_IT_TCIF0); // Transfer error DMA_ClearFlag(DMA2_Stream0, DMA_FLAG_TEIF0); DMA_ClearITPendingBit(DMA2_Stream0, DMA_FLAG_TEIF0); // Direct mode error DMA_ClearFlag(DMA2_Stream0, DMA_FLAG_DMEIF0); DMA_ClearITPendingBit(DMA2_Stream0, DMA_FLAG_DMEIF0); //FIFO overrun/underrun DMA_ClearFlag(DMA2_Stream0, DMA_FLAG_FEIF0); DMA_ClearITPendingBit(DMA2_Stream0, DMA_FLAG_FEIF0); DMA_ITConfig(DMA2_Stream0, DMA_IT_TC, ENABLE); DMA_ITConfig(DMA2_Stream0, DMA_IT_TE, ENABLE); DMA_ITConfig(DMA2_Stream0, DMA_IT_DME, ENABLE); DMA_ITConfig(DMA2_Stream0, DMA_IT_FE, ENABLE); и вот обработчик прерывания от таймера из за которого перестает работать дма (исключительно в целях отладки) static inline void timer_1ms_handler(void) { status_led_time_proc(); for (uint8_t i = 0; i < 45; i++) asm("nop"); } приоритеты прерываний #define IRQ_TIMER_PREEM_PRIO 15 #define IRQ_TIMER_SUB_PRIO 0 #define IRQ_TFT_DMA_TC_PREEM_PRIO 0 #define IRQ_TFT_DMA_TC_TIMER_SUB_PRIO 0 Буду благодарен за идеи.
  17. Актуально. Есть свободное время и желание. Предложения на мыло [email protected] или в личку.
  18. Актуально. Есть свободное время и желание. Предложения на мыло [email protected] или в личку.
  19. AnatolyT, а у вас есть контакты производителей в Китае?
  20. Добрый день. Интересует изготовление пленочной клавиатуры. Планируем использовать как переднюю панель прибора. Вот то, что планируем получить: 1. 4 кнопки. 2. один светодиод. 3. Семи сегментные индикаторы. 4 знакоместа с точками. (можно 14 сегментные или 16 сегментные индикаторы). 4. Декоративное оформление, можно и в двух цветах (возможность напечатать логотип и всякие дизайнерские штучки). 5. Размеры примерно 5х5 см. Интересует стоимость изготовления такой клавиатуры, какая документация нужна (только дизайн или и "разводка" тоже), сколько в итоге будет стоять один экземпляр или партия. Территориально - Украина. Спасибо.
×
×
  • Создать...