Главная arrow Форум  
28.04.2017 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Простые устройстваОтличные товары по превосходным ценамОтличные товары по превосходным ценам
Форум ARV Research
Добро пожаловать, Гость
Пожалуйста Вход или Регистрация.
Забыли пароль?
В ответ на: Си для МК и не только, вопросы и ответы (1 просматривает)
_GEN_GOTOBOTTOM Ответить

TOPIC: В ответ на: Си для МК и не только, вопросы и ответы

#8540
ARV (Администратор)
Администратор
Постов: 2379
graph
В ответ на: Си для МК и не только, вопросы и ответы 27.01.2015 13:03 Репутация: 174  
rand нереентерабельная функция, т.е. она не должна вызываться одновременно из обработчика прерывания и из основного цикла, т.к. в основном цикле может быть прервана и тогда произойдет вызов rand изнутри самого rand.

в avr-gcc есть вариант реентерабельной функции rand, наверное и для arm-gcc тоже должна быть аналогичная...
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8541
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 28.01.2015 00:33 Репутация: 0  
ARV писал(а):

в avr-gcc есть вариант реентерабельной функции rand, наверное и для arm-gcc тоже должна быть аналогичная...
В случае с AVR что это за функция? В моем случае это не происходило, из main я её вызывал чтоб убедится что она там работает и числа разные.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8542
ARV (Администратор)
Администратор
Постов: 2379
graph
В ответ на: Си для МК и не только, вопросы и ответы 28.01.2015 21:29 Репутация: 174  
в случае avr-gcc это функция rand_r - она получает указатель на long, в котором хранит какое-то свое число, являющееся, как я понимаю, сдвиговым регистром для псевдослучайной последовательности. поэтому если обращаться к этой функции, передавая разные указатели, будут получаться не связанные друг с другом разные последовательности.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8543
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 28.01.2015 21:35 Репутация: 0  
Есть такая функция и в этом gcc. Попробую её. Остался вопрос: для этой функции тоже нужно вызывать srand в начале для инициализации?
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8544
ARV (Администратор)
Администратор
Постов: 2379
graph
В ответ на: Си для МК и не только, вопросы и ответы 30.01.2015 09:20 Репутация: 174  
я не в курсе - нужно документацию читать
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8548
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 02.02.2015 00:51 Репутация: 0  
Функция rand_r заработала как мне нужно, спасибо за помощь.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8779
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 28.10.2015 01:13 Репутация: 0  
Доброго времени суток.

Просветите пожалуйста: есть некая библиотека, например UART (это не важно, главное смысл вопроса), и есть функция send_uart, которой передается указатель на буфер и количество байт для передачи.
Code:

  static char *buf_tx; static uint16_t count_tx; ... void Send_UART(char *suint16_t count) {     buf_tx s// берем начальный адрес     USART1->DR = *buf_tx// отправляем первый байт     buf_tx++; // инкримент адреса     count_tx count 1// инициализация счетчика     USART1->CR1 |= USART_CR1_TXEIE// включаем прерывание по опустошению буфера } /* далее в прерывании по опустошению буфера мы продолжаем передачу пока счетчик не будет равен нулю  */


Это работает если буфер глобальный. Что произойдет если мы находясь в функции, где есть локальный буфер, вызовем функцию Send_UART передав ей указатель на этот локальный буфер, и покинем функцию. Ведь локальный буфер должен уничтожится и что тогда будет передаватся в UART? мусор?
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол