Перейти к содержанию
    

Quasar

Свой
  • Постов

    344
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

Сообщения, опубликованные Quasar


  1. Кстати, в ЧИПиДИПе имеются в наличии платы с нанесенным фоторезистом, это снимает большое кол-во гемороя с нанесением :) .Я правда пока балончиком пользуюсь...но надо как-нибудь и это попробывать...

    http://www.chipdip.ru/product0/9000036029.aspx

  2. Ну либо:

     

    static void (*rputchar)(unsigned char c);
    
    void rprintfInit(void (*putchar_func)(unsigned char c))
    {
        rputchar = putchar_func;
    }
    
    void rprintfChar(unsigned char c)
    {
        rputchar(c);
    }

     

    Тогда при инициализации:

     

    rprintfInit(lcd_putchar);

     

    И печатаем, что хотим :)

     

    rprintfChar('Y');
    .
    .
    .

     

    Так сделано например в AVRlib.

  3. И не может работать в принципе. Все правильно.

     

    В смысле не может, всё работает, если использовать только один массив (ну во всяком случае в gcc), вот с двумя уже нет.

     

    А что значит, наложение на уже существующую память?

  4. В теории цепей обычно рассматриваются установивщиеся режимы, а тут переходной процесс.

     

    Да вы что, одна из тем курса теории цепей так и звучит "Ресчет переходных процессов в цепях первого - второго порядка", так что, это именно ТЭЦ, и даже ОТЦ (основы теории цепей).

     

    А формула U(t)=E*(1-exp(-t/tau)) есть переходная характеристика данной RC цепочки. Находить её можно разными способами, изначально, это конечно решение диф.ур-я цепи. Ну, а проще юзать либо преобразование Лапласа, либо Фурье...(только это разве, что в целях повышения образованности :) )

  5. И как, допустим, в цикле их перебирать если все структуры разной длины???

     

    Да, с перебором в цикле - проблема :) . Но как Вы могли догадаться, в массиве Text[] храниться текст :) , и вообщем-то данный приём только для текста-то и полезен, ибо в цикле чаще всего стоит условие while ( '\0' != Text[i++]) то есть перебираем весь массив, допустим для печати.

     

    Ну а в плане инициализации то:

     

    typedef struct {
        void       *Next;
        void       *Previous;
        void       *Parent;
        void       *Sibling;
        FuncPtr     SelectFunc;
        FuncPtr     EnterFunc;
        const char  Text[];
    } Menu_Item PROGMEM;
    
    Menu_Item MyStruct = {(void*)&SomePtr, (void*)&SomePtr, (void*)&SomePtr, (void*)&SomePtr, (FuncPtr)SomeFnc, (FuncPtr)SomeFnc, { "SomeTEXT" }};

     

    Ну а полный код взят собственно здесь:

    http://electronix.ru/forum/index.php?act=A...st&id=10450

  6. ИМХО это очччень не хорошо, если это на самом деле работает. Ни когда не известно, какого размера структура

     

    Ну почему не известно, длинна всех типов в структуре, плюс длинна массива, полученная при инициализации, так получается. Кстати именно поэтому видимо и требование такое, что бы массив был в конце структуры, вот два и не получится разместить :crying: .

     

    В определении типа не нужно указывать атрибутов (PROGMEM), они указываются при обьявлении переменных этого типа :

     

    Ну почему же не нужно, смотря для чего, в данном случае надо что бы всё было во флеш, зачем же тогда по сто раз PROGMEM писать. :)

  7. Можно сделать немного по другому, если Вы не знаете точно, какой длины массивы будут

     

    typedef struct {  
        const char  *pEngl; /* указатель на массив Engl */
        const char  pRuss; /* указатель на массив Russ */
    
    } LangStruct PROGMEM;

    А далее в конструкторе (функции инициализации) указателям присваивать конкретные адреса массивов... Еще бы я добавил, в таком случае, в структуру размеры массивов.

    Ну да, видимо так и сделаю.

     

    Интересно, а какой размер массива Text??? Зеро байт? :) Или миллион?

     

    А ни какой, это примерно аналогично extern char Mass[], то есть происходит определение, а память выделяется при создании экземпляра.

  8. Нет конечно! Ни один, ни два и не десять массивов (в структуре или нет) так определять нельзя. И компилятор ругается справедливо, ибо размеры массивов не заданы, соответственно, компилятор не знает, сколько памяти надо для размещения переменной такого типа.

     

    Почему это ни одного?

     

    typedef struct {
        void       *Next;
        void       *Previous;
        void       *Parent;
        void       *Sibling;
        FuncPtr     SelectFunc;
        FuncPtr     EnterFunc;
        const char  Text[];
    } Menu_Item PROGMEM;

     

    Прекрасно компилится и работает. (Это из MicroMenu взято). Проблема именно в двух таких массивах.

     

    Да, и к тому же опеределение типа

    extern char mass[]; тоже вполне работает, но это уже отдельный разговор...

  9. При таком определении компилятор ругается:

    typedef struct {  
        const char  Engl[];
        const char  Russ[];
    } LangStruct PROGMEM;

     

    Мол переменной длинны, массив не в конце.

     

    Собственно вопрос, а возможно ли вообще в С размещать таким образом два массива?

  10. Const скажет компилятору о том, что это не модифицируется, но расположение всё равно будет в sram.

     

    Я делал так:

     

    #include <avr/pgmspace.h>
    
    const uint8_t nameMas0[] PROGMEM= {    .....   };
    
    .....
    //Считывание
    i = pgm_read_byte(&nameMas0[нумбер]);

     

    umup

     

    Опередил :)

  11. Толк будет только от того кто сам хочет что-то получить за время обучения, другого толка я не знаю.

    Прально, но согласитесь, что в данном случае, для такого человека и ВУЗ уже не нужен... Парадокс :blink:

  12. Если кто знает или сам учился, поделитесь впечатлениями о качестве обучения в предложенном Вами СУЗе.

     

    Я заканчивал МРТК им А.А.Расплетина... года 3 назад. Вообщем качество ни какое. Но всё равно лучше, чем идти в 10 и 11 класс школы, тут хотя бы какую-нибудь корочку с профилем дают. Могу сказать, что на радио-специальностях у них последние годы вроде как недобор.

     

    В СУЗах вообщем-то такая же ситуация как и в ВУЗ'ах бардак, да особо ни чему толковому не учат, всему надо самостоятельно учиться :)

×
×
  • Создать...