Jump to content

    

Lyrri

Участник
  • Content Count

    27
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Lyrri

  • Rank
    Участник

Информация

  • Город
    Киев

Recent Profile Visitors

763 profile views
  1. Использование Trace Hook Macros

    Цитатаalexp74 Also depending on the port and development environment it may be necessary to use the pre-processor to prevent the configuration file from being included from assembly files. For example, in IAR this can be done as follows... alexp74, спасибо. Помогло.
  2. Здравствуйте. Столкнулся со следующей проблемой. Необходимо максимально быстро читать область памяти с процессора (STM32F212, память RAM) с помощью OpenOCD. Сейчас циклически читаю с помощью команды dump_image. Столкнулся с тем, что вне зависимости от того, какую скорость я устанавливаю через adapter_khz, фактически она остается одной и той же. Проверил с отладчиками J-Link v.8 и ST-Link v.2 На скриншотах приведены параметры запуска OpenOCD и фактическая скорость, снятая логическим анализатором с пина TCK (SWCLK). ST-Link v.2 950 kHz ST-Link v.2 1800 kHz ST-Link v.2 4000 kHz J-Link v.8 8000 kHz Что я пропустил/делаю не так? Кто-то озадачивался скоростью загрузки/выгрузки данных через OpenOCD? Заранее спасибо.
  3. Использование Trace Hook Macros

    Действительно ))) Спасибо. Я чего-то решил, что компилятор будет ругаться на то, что функция не была объявлена заранее.
  4. Здравствуйте. Для логгирования событий FreeRTOS попробовал подключить Trace Hook Macros (Чип STM32F2xx, компилятор IAR, FreeRTOS v8.2.2) Возникла проблема с местом определения этих макросов. Наткнулся на рекомендацию от Ричарда, где он пишет: "The best place to define hook macros, such as traceTASK_SWITCHED_OUT(), is in FreeRTOSConfig.h. That way the order in which macros are defined is guaranteed to be correct. If you are going to write complex macros then you can put them in their own header file, and include that header file from FreeRTOSConfig.h" Попробовал подключить свой хедер в FreeRTOSConfig.h. Хедер выглядит следующим образом Код#ifndef LOGGER_H_ #define LOGGER_H_ #include <stdint.h> void logger_init(); void logger_createtask(uint32_t addrname, uint32_t prio, uint32_t stacksize); #define traceSTART                  logger_init(); #define traceTASK_CREATE(xTask) \ logger_createtask((uint32_t)&xTask->pcTaskName, xTask->uxPriority, \                     (xTask->pxTopOfStack-xTask->pxStack)); #endif /* LOGGER_H_ */ Но возникла проблема. FreeRTOSConfig.h также включается в portasm.s и компилятор выдает ошибку при попытке скомпилировать проект. Кто нибудь использовал эти макросы? Где их лучше/правильнее всего разместить?
  5. Tracealyzer для FreeRTOS

    Ответ от CEO Percepio AB. Недельный лог пока что не доступен ЦитатаJohan Kraft Our new streaming support for J-Link debug probes records only about 100 KB/s, so a 72 hour trace would be possible with a large hard drive. The current version of our tool is not yet able to open and process that long traces, but we are working on that.
  6. Tracealyzer для FreeRTOS

    Наткнулся на логгер FreeRTOS от Percepio link. Инструмент показался интересным, но возник вопрос - насколько он необходим? Кто-то пользуется подобными инструментами, или это всего лишь красивая "игрушка"? Хотя, просмотреть недельный лог работы системы было бы наверное интересно.
  7. ЦитатаSII: Это надо смотреть документацию на используемую ОС. Использую FreeRTOS, но что это поменяет? Эти обработчики уже задействованы в работе RTOS и лезть в них руками не хотелось бы. Цитатаfatlortroll: Вот здесь пишут, что привилегированный режим по умолчанию доступен сразу после сброса контроллера: Thread mode is privileged out of reset, but you can change it to user or unprivileged by... Спасибо. Это я видел. Но хотел сделать инициализацию в виде функции dbg_init(); внутри которой инициализируются регистры ITM.
  8. Здравствуйте. Хочу сделать вывод отладочной информации через SWO используя ITM, поскольку ядро позволяет. ЦитатаThe ITM is a an application driven trace source that supports printf style debugging to trace Operating System (OS) and application events, and emits diagnostic system information... link Для этого нужно сконфигурировать регистры модуля ITM. В часть регистров запись возможна только в привилегированном режиме: ЦитатаITM Trace Privilege Register Use the ITM Trace Privilege Register to enable an operating system to control which stimulus ports are accessible by user code. Note: You can only write to this register in privileged mode. see ITM Trace Privilege Register Как "красивее" попасть в привилегированный режим, если в процессе работы уже используются SVC, PendSV, SysTick прерывания (на камне запущена RTOS)? Возможно ли вообще попасть в этот режим при таких начальных условиях?
  9. Цитата(mantech @ Feb 26 2014, 11:11) Может немного не в тему, но для чего все это? Это все для того чтобы понять что же произошло у конечного пользователя, если что-то пойдет не так. Ведь обычно feedback приходит в виде "А я включил а оно не работает.... Оно то работает то не работает... итд". ЦитатаВы уверены, что перезагрузка происходит именно из-за исключительной ситуации, просто у меня еще никогда такого не было... Перегрузка происходит во вачдогу. Если программа застряла в исключении, то пишется тип исключения и содержание соотв. регистров. Если какая-то из задач (у меня FreeRtos) не "отчиталась" за определенный период времени о том что она жива, также произойдет перезагрузка системы по вачдогу. В этом случае во флеш будет записано имя повисшей задачи.
  10. Цитата(adnega @ Feb 26 2014, 10:42) Вам будет какая-то выгода, если вместо одного HardFault будут вызываться все эти обработчики? В конце концов есть регистры xFSR. Выгод то особых и нету (пока). Для анализа "что же произошло" на этапе тестирования достаточно HardFault.
  11. Цитата(ig_z @ Feb 25 2014, 18:55) Классика жанра - деление на ноль. Книги и интернет завалены примерами. С HardFault вопросов как раз нету. Как, к примеру, BusFault вызвать (кроме, конечно BusFault() )? В каких книгах и интернетах это посмотреть?
  12. В текущем проекте сделал сохранение последнего исключения во внешнюю flash память для дальнейшего анализа (сохранение последней причины перезагрузки системы). Осталось это все дело протестировать. То есть написать тестовый код так, чтобы гарантированно вызвать исключения: NMI, HardFault, MemManage, BusFault, UsageFault. Нашел как вызвать HardFault на просторах этого форума (попытка чтения по невыровненному адресу). Кодvoid make_hard_fault() {     __asm volatile     (         "MOVS r0, #1       \n"         "LDM r0,{r1-r2}    \n"         "BX LR                \n"     ); } Как лучше/правильнее протестировать все остальные исключения?
  13. законченный модуль WiFi с SPI или UART

    ЦитатаМогу посоветовать, что однозначно брать не стоит: RS9110-N-11-02 (Redpine Signals), TiWi-SL (CC3000) Texas Instruments, WF121 (Bluegiga) А что с WF121 (Bluegiga) не так? Вдоволь наковырялся с TiWi-SL (CC3000) - он пока еще сырой.
  14. STM32 USB и FreeRTOS

    Нашел в чем проблема, может для кого-то будет актуально. Как только производится запись в ненулевую IN endpoint (функция DCD_EP_Tx()), вызывается функция USB_OTG_EPStartXfer() и устанавливает DREGS->DIEPEMPMSK в 1 для заданого endpoint. После этого, когда TX FIFO окажется пустым, получим прерывание "empty FIFO", флаг которого нигде в библиотеке не сбрасывается. В итоге получаем прерывание, обработчик которого выполняется постоянно. Как исправить: - в файле usb_dcd_init.c находим функцию DCD_WriteEmptyTxFifo() - в этой функции находим следующие строки Кодep->xfer_buff  += len; ep->xfer_count += len; - и после этих строк добавляем следующий код Кодif( ep->xfer_count >= ep->xfer_len){         uint32_t fifoemptymsk = 1 << ep->num;         USB_OTG_MODIFY_REG32(&pdev->regs.DREGS->DIEPEMPMSK, fifoemptymsk, 0);         break; }
  15. STM32 USB и FreeRTOS

    Цитата(EugenyAM @ Apr 12 2012, 05:49) В функциях EPx_Callback используются вызовы rtos? В функциях EPx_Callback вызовы rtos не используются. Данные принятые от ПК отправляются обратно. Цитата(adnega @ Apr 12 2012, 07:00)А с приоритетами прерываний раобрались? При инициализации USB использую следующий код: КодNVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 10; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); Поскольку вызовы rtos в прерывании не используются, приоритет прерывания выше чем Код#define configMAX_SYSCALL_INTERRUPT_PRIORITY     191 /* equivalent to 0xb0, or priority 11. */ Мои рассуждения по поводу прерываний верны? Или я где-то ошибся?