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





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

 R785211844650
 Z210696637574
 E368177590409

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

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

#8449
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: Си для МК и не только, вопросы и ответы 24.07.2014 21:54 Репутация: 175  
когда вы помечаете переменную префиксом extern, вы по сути даете возможность воспринимать эту переменную в любом модуле, как принадлежащую этому модулю. если же вы начинаете работать с указателями, то ничего нового, кроме появления дополнительной переменной-указателя, вы не получаете. думаю, указатель - это лишнее.

количество структур в массиве легко находится выражением sizeof(array)/sizeof(struct_t), т.е. простым делением размера массива в байтах на размер структуры в байтах.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8450
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 25.07.2014 21:31 Репутация: 0  
Code:

  calendar->minutes = *main_scr[2] * 10 + *main_scr[3]; calendar.seconds = *main_scr[4] * 10 + *main_scr[5];


На первую строку компилятор ругается error: invalid type argument of '->' (have 'calendar_type'), в книжке прочитал, что при косвенном выборе требуется, чтобы с объектом был связан указатель. Тоесть чтобы использовать косвенный выбор нужно создать указатель на структуру и уже с ним работать? Если это так, то разясните разницу, зачем создавать лишний указатель, тоесть чем лучше косвенный выбор.

P.S. Кажись дошло , это когда например в функцию передается указатель структуры, тогда использовать косвенный выбор, верно?

Содержимое поста отредактировано: Apparatchik, в: 25.07.2014 21:33
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8451
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: Си для МК и не только, вопросы и ответы 26.07.2014 12:10 Репутация: 175  
я программист-самоучка, поэтому от всяких умных слов "косвенный выбор" теряюсь
но похоже, все именно так.
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8452
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 27.07.2014 22:46 Репутация: 0  
В модуле string.h есть функции:
Code:

  void memcpy(void *dest, const void *srcsize_t len); void memmove(void *, const void *, size_t);


обе функции копируют байты из области источника в область приемника, но в первой эти области не должны пересекаться. Объясните пожалуйста, что значит области могут или не могут пересекаться?
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8453
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: Си для МК и не только, вопросы и ответы 28.07.2014 10:57 Репутация: 175  
простой пример:
Code:

 char arr[100]; memcpy(&arr[50], &arr[40], 10); // копируем 10 байт, начиная с 40-го memcpy(&arr[50], &arr[40], 20); // копируем 20 байт, начиная с 40-го - ОШИБКА, области пересекаются!!!



Содержимое поста отредактировано: ARV, в: 28.07.2014 10:58
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8535
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 25.01.2015 02:41 Репутация: 0  
Здравствуйте.

У меня такая проблема: если я функцию rand(); вызываю в "вечном цикле" то все нормально числа псевдо разные, но мне нужно вызывать её в обработчике прерывания 6 раз за один проход обработчика. Числа получаются разные но при следуйщем входе в обработчик числа получаются те же, что были в прошлый раз. Вышел с ситуации создав большой массив и заполняю его при старте, а потом беру с него значения, но это как говорят "костыль". Почему так происходит с генератором случайных чисел?

P.S. srand для инициализации вызываю при старте программы, в качестве аргумента использую системное время, контроллер STM32, тулчейн gcc-arm-none-eabi.
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8536
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: Си для МК и не только, вопросы и ответы 26.01.2015 00:09 Репутация: 175  
лично я с арм-ами вообще не знаком...
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8537
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 26.01.2015 22:40 Репутация: 0  
Может это не конкретно армов проблема, к сожалению щас не могу проверить на avr чуть пожже получится. А вообще если вызывать rand в какой нибудь функции, то при следуйщем входе в функцию числа должны быть другими? или это зависит от компилятора?
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8538
ARV (Администратор)
Администратор
Постов: 2384
graph
В ответ на: Си для МК и не только, вопросы и ответы 26.01.2015 22:49 Репутация: 175  
rand должна возвращать разные числа. однако, если выполнить srand с определенным параметром, последовательность чисел будет одной и той же.
т.е. так:
srand(1);
rand(); // первое число
rand(); // второе число
...
rand(); // n-ное число
srand(1);
rand(); // снова то самое первое число
srand(2);
rand(); // начинается новая цепочка чисел, не совпадающая с предыдущей
Не стыдно не знать, стыдно не учиться
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
#8539
Apparatchik (Пользователь)
Специалист
Постов: 123
graphgraph
В ответ на: Си для МК и не только, вопросы и ответы 26.01.2015 22:54 Репутация: 0  
именно так и просходит если я вызываю rand в main, но если я вызываю функцию (или перехожу в обработчик прерывания), в которой уже вызывается rand, то при каждом новом входе в функцию последовательность чисел одна и таже. srand я вызываю один раз в начале main.

Содержимое поста отредактировано: Apparatchik, в: 26.01.2015 22:54
  Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
_GEN_GOTOTOP Ответить
© Copyright 2007 Best of Joomla, Работает на FireBoardполучить последние сообщения прямо на Ваш рабочий стол