Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

Re: Вопросы по С/С++ (СИ)

Сообщение Мikа »

BCluster,
#include <stdlib.h>

вообще красавчик :beer: А я уже зачитался http://habrahabr.ru/post/132217/

А под эту строку

Код: Выделить всё

memset(Led /*ptr*/, 1 /*value*/ ,7 /*Length*/)

компилятор ругается. Тоже библиотека какая-то нужна?
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение BCluster »

Мikа писал(а):А под эту строку

Код: Выделить всё

memset(Led /*ptr*/, 1 /*value*/ ,7 /*Length*/)

компилятор ругается. Тоже библиотека какая-то нужна?

string.h кажется.
Но если массив типа int (2 байта) номер не пройдет
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

Re: Вопросы по С/С++ (СИ)

Сообщение Мikа »

Массив однобайтный, щас перепавил. А в функции рандомного числа тоже что-то надо допилить. Только пока не пойму что...
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение BCluster »

а что с фукнцией не так?
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Вопросы по С/С++ (СИ)

Сообщение ploop »

Дык числа повторяются :)))
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение YS »

Дык числа повторяются


:)))

Cлучайные числа можно брать из младших битов АЦП. Я, кстати, все хочу прогнать получающиеся значения через DIEHARD.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение BCluster »

Ага :) блин совсем уже засишарпился :)
Для того, чтоб этого не случалось надо вначале вызвать srand() с каким-то случайным числом.
Взять его можно либо из RTC, либо из АЦП, как сказал ув. YS
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение YS »

Вообще я обычно применяю не стандартный генератор, а LFSR. В rand() используются умножения на большие числа, и это не айс. :)

Вот моя реализация LFSR (возможно, не самая оптимальная):

Спойлер

Код: Выделить всё

//Generating random numbers with 16-bit LFSR
uint8_t LFSR_Random(void)
{
    static uint16_t LFSR=0xBADC;
    uint8_t out_byte,i;

    out_byte=0;

    for (i=0; i<8; i++)
    {
        LFSR=(LFSR << 1) | (((LFSR >> 15) ^ (LFSR >> 13) ^ (LFSR >> 12) ^ (LFSR >> 10) ^ (LFSR >> 0)) & 0x0001);

        out_byte|=((LFSR & 0x8000) >> 8) >> i;
    }

    return out_byte;
}


Опять же, начальное значение (которое у меня 0xBADC) можно задавать разным. При этом для каждого такого начального значения получится абсолютно идентичная последовательность. :)
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение BCluster »

YS, неплохо. Вполне даже. Я просто в МК крайне редко встречаюсь с необходимостью генерации псевдослучайных чисел, поэтому никакой базы для этого не имею :)
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

Re: Вопросы по С/С++ (СИ)

Сообщение unalex »

а не проще ли к АЦП подключить генератор шума и читать значения?
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение YS »

YS, неплохо. Вполне даже.


Спасибо. :oops:

Это я когда делал имитацию свечки, мне понадобился ГПСЧ. С тех пор при необходимости его использую.

А так да, во встроенных системах оно редко надо.

а не проще ли к АЦП подключить генератор шума и читать значения?


Это будет дольше и не всегда целесообразно.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение BCluster »

YS писал(а):С тех пор при необходимости его использую.

Утащил в закрома с вашего позволения :)
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Вопросы по С/С++ (СИ)

Сообщение ploop »

Тоже утащил.
BCluster писал(а):с вашего позволения

А куда он денется с подводной лодки? :)))
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение YS »

BCluster, ploop, я великодушно разрешаю. :))) :beer:

Внезапно, однако. :)) Если бы я предполагал, что им будет пользоваться кто-то, кроме меня, я бы хоть seed в дефайн вынес. :)) И вообще, запилил бы модуль, чтобы красиво было. Комментариев бы понаписал...
Разница между теорией и практикой на практике гораздо больше, чем в теории.
jazz393
Встал на лапы
Сообщения: 118
Зарегистрирован: Ср фев 05, 2014 18:54:39

Re: Вопросы по С/С++ (СИ)

Сообщение jazz393 »

в примере на мк есть такая функция

Код: Выделить всё

GPIO1ModuleClkConfig();

когда я пытаюсь собрать свой проект, используя те же хедеры, что подключены в примере, то компоновщик ругается на эту функцию, в хедере объявлен только её прототип

Код: Выделить всё

extern void GPIO1ModuleClkConfig(void);.

Самого описания функции я найти не могу, ни в примере, ни где бы то нибыло...
Т.е. мб такое, что она описана в каком-то другом файле (не Си-шном)...?
для программирования я использую API от TI , и по идее функция должна быть там описана, но там её описания нет
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение BCluster »

Это starterware? Либо что-то недополключили, либо функция в скомпилированной библиотеке
jazz393
Встал на лапы
Сообщения: 118
Зарегистрирован: Ср фев 05, 2014 18:54:39

Re: Вопросы по С/С++ (СИ)

Сообщение jazz393 »

да startWare , уже разобрался, там действительно есть просто си-шные файлы с разными функциями, описания которых в руководстве нет
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Вопросы по С/С++ (СИ)

Сообщение pokk »

Здравствуйте, есть вот такая хитрая структура (тут мне не совсем понятно что делает union и зачем он там нужен)
Спойлер

Код: Выделить всё

typedef struct __WIZCHIP
{
   uint16_t  if_mode;               ///< host interface mode
   uint8_t   id[6];                 ///< @b WIZCHIP ID such as @b 5100, @b 5200, @b 5500, and so on.
   /**
    * The set of critical section callback func.
    */
   struct _CRIS
   {
      void (*_enter)  (void);       ///< crtical section enter
      void (*_exit) (void);         ///< critial section exit 
   }CRIS; 
   /**
    *  The set of @ref\_WIZCHIP_ select control callback func.
    */
   struct _CS
   {
      void (*_select)  (void);      ///< @ref \_WIZCHIP_ selected
      void (*_deselect)(void);      ///< @ref \_WIZCHIP_ deselected
   }CS; 
   /**
    * The set of interface IO callback func.
    */
   union _IF
   {   
      /**
       * For BUS interface IO
       */ 
      struct
      {
         uint8_t  (*_read_byte)  (uint32_t AddrSel);
         void     (*_write_byte) (uint32_t AddrSel, uint8_t wb);
      }BUS;     
      /**
       * For SPI interface IO
       */
      struct
      {
         uint8_t (*_read_byte)   (void);
         void    (*_write_byte)  (uint8_t wb);
      }SPI;
      // To be added
      //
   }IF;
}_WIZCHIP;

Заполнение её (.if_mode .id и др указывают место расположение ? т.е при таком подходе можно их местами менять ? )
Спойлер

Код: Выделить всё

_WIZCHIP  WIZCHIP =
      {
      .id                  = _WIZCHIP_ID_,
      .if_mode             = _WIZCHIP_IO_MODE_,
      .CRIS._enter         = wizchip_cris_enter,
      .CRIS._exit          = wizchip_cris_exit,
      .CS._select          = wizchip_cs_select,
      .CS._deselect        = wizchip_cs_deselect,
      .IF.BUS._read_byte   = wizchip_bus_readbyte,
      .IF.BUS._write_byte  = wizchip_bus_writebyte
//    .IF.SPI._read_byte   = wizchip_spi_readbyte,
//    .IF.SPI._write_byte  = wizchip_spi_writebyte
      };


Работа с ней выглядит так

Код: Выделить всё

WIZCHIP.CS._select();

т.е получается просто вызывается функция wizchip_cs_select()

Так вот чём преимущество такого подхода WIZCHIP.CS._select(); по сравнению с wizchip_cs_select(); ?
И на сколько дольше выполняется первый метод по сравнению со вторым?
Аватара пользователя
aam
Собутыльник Кота
Сообщения: 2994
Зарегистрирован: Сб фев 20, 2010 14:00:12
Откуда: Москва

Re: Вопросы по С/С++ (СИ)

Сообщение aam »

Здравствуйте!
Кто работал с freemodbus?
Пытаюсь создать в IAR AVR проект на основе demo. Сначала задолбался с добавлением всех файлов в проект и прописыванием путей препроцессору.
Теперь он не находит какие-то avr\io.h , avr\interrupts.h, которых в IARe нет. Юзал кто эту библиотеку? Может надо в настройках проекта что-то конкретное установить типа CLIB / DLIB и т. п. ?
Нагуглил по теме вот что: http://mainloop.ru/avr-atmega/modbus-avr.html
Но там больше про то как скомпилить демку с командной строкой. А мене то прогу еще писать в ИАРе на основе этой библиотеки.
Проц я выбрал Мега128

Есть вообще где-нибудь нормальные примеры как юзать эту библиотеку?
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

Re: Вопросы по С/С++ (СИ)

Сообщение coredumped »

Может проще AVR-студию поставить с С-фреймворком, чем мучаться с портированием под иар?
Все будет только лучше, в крайнем случае - хуже.
Ответить

Вернуться в «Разные вопросы по МК»