реклама на сайте
подробности

 
 
> Keil RTOS и микросекундные задержки.
zheka
сообщение Apr 16 2015, 06:12
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Господа, есть проект в KEIL 5 под STM32F4Discovery, в котором подключена RTOS (Keil RTX). Она мне в принципе не нужна, она требуется для работы библиотеки USB_CDC, попытки отвязать ее от KEIL RTX не принесли успеха.
В Keil RTX есть только миллисекундные задержки, микросекундных - нет.
Пытался прикрутить библиотеку systick - не вышло - компилятор не дает создать свой Systick_Handler, мотивируя это тем, что таковой есть уже в HAL_CM4.C (это файл RTX)

Как мне в сложившихся условиях (невозможность отключить RTOS и отсутствие специальной функции в ней) получить функцию, осуществляющую задержку на заданное число микросекунд?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zheka
сообщение Apr 16 2015, 07:11
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Цитата
Если не запрещать прерывания

Цитата
Какие проблемы запретить прерывания

Взаимоисключающие решения)))

Цитата
А решение очевидное: простой цикл ожидания с использованием одного из аппаратных таймеров.

Не хочется мне занимать таймер.

Цитата
DWT_CYCCNT.

Что нужно подключить к проекту, чтобы компилятор не ругался, что не знает этого идентификатора?
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 16 2015, 07:16
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(zheka @ Apr 16 2015, 10:11) *
Что нужно подключить к проекту, чтобы компилятор не ругался, что не знает этого идентификатора?

Я ничего не подключаю. У меня есть вот такие дефайны:
Код
#define DWT_CTRL   (*(uint32_t volatile*)0xE0001000)
#define DWT_CYCCNT (*(uint32_t volatile*)0xE0001004)
#define SCB_DEMCR  (*(uint32_t volatile*)0xE000EDFC)

Ну и перед использованием этого таймера делаю вот так:
Код
void init_cyccnt(void)
{
        SCB_DEMCR |= 1 << 24;
        DWT_CYCCNT = 0;
        DWT_CTRL |= 1;
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 11:24
Рейтинг@Mail.ru


Страница сгенерированна за 0.01404 секунд с 7
ELECTRONIX ©2004-2016