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

adnega

Свой
  • Постов

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

  • Посещение

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

    3

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


  1. Спасибо за очень, очень дельный совет, но аутсорс - это то, чего мы "нахавались" за последние 2 года по горло. Нет.

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

    ЗП ниже, так и производительность не удовлетворительная.

    В "нашей деревне" найти хорошего спеца было не возможно. Всех кого брали (с головой и руками) после некоторого времени уходили "в лучшие места".

    Это в тот самый момент, когда работник начинал довоть результат. Отношения в некоторых фирмах сейчас выстраиваются так, что держать дорогого

    специалиста фирма не может, а хороший специалист уходит туда, где более востребован или на аутсорс.

    Чем Вы сможете удержать хорошего специалиста?

     

    С другой стороны, напрасно Вы так про фрилансеров и аутсорс. Наличие негативного опыта вовсе не доказывает, что явление плохое само по себе.

    "Тысячи их" фрилансеров и фирм, которые пользуются аутсорсом - и, поскольку я сам из тех и этих, знаю - при хорошем Исполнителе и адекватном

    Заказчике все стороны довольны. "Вы не любите кошек? Да, вы их просто не умеете готовить!". Может, стоит пересмотреть свое отношение к проблеме?

    Можете высказать свои опасения, а мы попробуем их развеять...

     

    И еще один момент: поскольку Вам нужен специалист по LPC и STM32 (а это довольно слабые по современным меркам камушки), то и задачи не сильно

    сложные - их с успехом можно оформить в виде ТЗ, найти хорошего исполнителя и сэкономить не только время.

  2. Почему? RCC->AHB1ENR, бит CCMDATARAMEN включает ее, reset value = 0

    Упс. Начальное значание как раз 1 (смотрю для f407 в частности).

    Значит просто записать в SP адрес конца CCM сразу после сброса или в нулевое слово таблицы векторов.

  3. Кто-нибудь чего-нибудь может добавить....

    Для RS-485 лог "1" - это A=5В, B=0; лог "0" - A=0, B=5В.

    Для CAN лог "1(рецессив)" - это Z-состояние H=L(=2.5В); лог "0(доминант)" - H=5В, L=0В.

     

    Можно предположить, что соединение RS485_A=CAN_L, RS485_B=CAN_H даст работоспособный лог "0".

    И есть надежда на лог "1", если приемник RS485 воспринимает равенство A=B за лог "1"(скорее всего или может быть вылечено растяжками) и приемник CAN воспринимает H=0, L=5В за лог "1" (возможно, если нет условия доминант, значит рецессив).

  4. Может, проще сделать свой usb-cdc. Там скорость обмена чисто информационный характер несет - чтоб железо могло знать нужную скорость.

    Реально на USB-FS можно получить поток под мегабайт, а это гораздо больше 2 Мбит.

    Исходники на форуме (для stm32f103) я выкладывал.

  5. Эксперименты в таком деле не лучший путь. Чувствую, что самый простой и правильный способ - спросить Инкотекс Наверное начну с этого в понедельник.

    http://www.incotexcom.ru/faqmercury/viewto...hp?f=5&t=63

    Протоколов передачи данных счётчиков "Меркурий" на сайте нет. Для получения надо прислать запрос на имя начальника отдела техподдержки Марова В.Н. Запрос оформить на фирменном электронном бланке вашего предприятия.
  6. О! Давно хотел решить аналогичную задачу. Можем попробовать вместе. Из документации есть что-нить? У меня где-то были протоклы, но, вроде, для RS485. Использование CAN, как Вы его описали, довольно странное. От CANа тут только физика получается.

  7. Я пользуюсь :)

    На чистом C или с ASM-вставками?

    В Keil или GCC?

     

    Может и правильнее, но в документации Cortex оно называется SVC (SuperVisor Call). :)

    Насколько я понял, разработчики Cortex-M изменили название инструкции (сохранив числовое значение) при переходе с ARM7,

    чтобы программист, который портирует код уделил внимание особенностям новой системы исключений.

  8. Хорошо бы примерчик взаимной блокировки от KnightIgor. Это ведь главное (ключевое) отличие Вашего подхода?

    Мол, конкурирующий запрет привел к блокировке, а конкурирующее разрешение нет.

     

    И еще: кто-нить пользуется SVC? Может, лучше через SVC, раз "лишние" прерывания KnightIgor не напрягают?

  9. Попробовал в виртуалке (ubuntu 12.10) - с последней версий все собирается. На железном сервере (ubuntu 13.10) - уже писал, что нет (internal compiler error).

    Могу дать удаленный доступ к "плохой" ubunte, но к сожалению, по личным причинам сейчас не до экспериментов (жена и дочка в больницу попали).

    Сам второй-третий год собираюсь с windows "спрыгнуть". Уже все компы, включая нетбук и десктоп жены, перевел на linux - остался последний ноутбук-кормилец (нужен для работы). Нашел HDD для ноутбука - попробую временно на нем развернуть все необходимые инструменты.

     

    Итого: если у меня одного проблемы, то беру таймаут на их разрешение + сделаю тестовый проект.

    Если, klen, есть желание и возможность поразбираться с internal compiler error, то могу дать учетку для удаленного подключения (ssh).

  10. adnega@NEWSRV:~/temp/test_nand$ ~/temp/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc --version
    arm-kgp-eabi-gcc (Klen's GNU package (KGP) for ARM/elf platform. << PROCYON >>) 4.9.0 20140224 (experimental)
    Copyright © 2014 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    adnega@NEWSRV:~/temp/test_nand$ make all
    compile  main.o
    ~/temp/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -fpack-struct -Wpadded -g -Os  -I . -I ./inc -gdwarf-2 -c main.c -o main.o
    main.c: In function ‘main’:
    main.c:174:2: internal compiler error: Недопустимая инструкция
     volatile float     x = 3.14f;
     ^
    Please submit a full bug report,
    with preprocessed source if appropriate.
    See <http://gcc.gnu.org/bugs.html> for instructions.
    make: *** [main.o] Ошибка 1
    

    Под

    Distributor ID: Ubuntu

    Description: Ubuntu 13.10

    Release: 13.10

    Codename: saucy

     

    На той же системе с другой версией собирается.

    root@NEWSRV:/home/adnega/temp/test_nand# /home/adnega/temp/arm-kgp-eabi-20130623/bin/arm-kgp-eabi-gcc --version

    arm-kgp-eabi-gcc (Klen's GNU package (KGP) for ARM/elf platform. << Fedor Konyukhov / Antarctica Cup Race Track 2008 >> ) 4.9.0 20130622 (experimental)

    Copyright © 2013 Free Software Foundation, Inc.

    This is free software; see the source for copying conditions. There is NO

    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

  11. давайте начнем с того что линеру не будем передавать опцию с путем до системных либ - это не нужно и вредно поскольку комбинация ключей позволяет ему самому решить где брать libc libm libgcc и тд.

     

    удалите в опциях линкера -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f

     

    косяг в том что происходит попытка слинковать объектники и либы собранные под разные fpu, осталось понять как у линкера возникло такое желание

     

    еще гипотеза - если я при сборке архива накасячил то возможно папка -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f пуста и в током случае линкер вынужден брать либы из корня d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib а там либы собранные бе поддержки фпу.

     

    в понедельник решим эту беду. подождите сутки.

    Пути убрал - ничего не поменялось.

    Меня больше напрягает: "error: main.o uses VFP register arguments, test_fp_v1.ite2.elf does not".

    Это как понимать: "*.elf не использует"?

    Видно, что до библиотек дело не доходит. Там бало бы что-то типа "failed to merge target specific data of file d:/gcc/arm-kgp-eabi-x86_64/arm-kgp-eabi/lib/thumb/cortex-m3\libc.a(lib_a-__call_atexit.o)".

     

    Вот еще пример, с одной из предыдущих версий умышленно линкуемых с либами для М3: "error: test_fp_v1.ite2.elf uses VFP register arguments, d:/gcc/arm-kgp-eabi-x86_64/arm-kgp-eabi/lib/thumb/cortex-m3\libc.a(lib_a-__call_atexit.o) does not".

    Теперь *.elf использует, а либа правильно не использует. У меня же наооборот)

     

    Думаю, не хватает чего-то, что заставит линкер ипользовать fpu-шные регистры при сборке. Я могу ошибаться, но может линкер "нерабочий", а не библиотеки? Ради эксперимента подсунул новые либы старому компилятору - вроде скомпилировался проект и даже работает.

     

    Со старым (рабочим) компилятором я получаю аналогичную ошибку, если указываю -mcpu=cortex-m3 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb. Странно, что компилируется все без ошибок, но линкер выдает: "error: main.o uses VFP register arguments, test_fp_v1.ite2.elf does not". Причем, можно компилятору указать M3, а линкеру М4 - все собирется и будет работать.

     

    До понедельника доживу. Я бы и не стал переходить на новую сборку, если бы не обнаружил, что в старых при записи, например, USART1->DR = x вместо операции "запись" происходит "чтение-запись". Причем, это самое чтение сбрасывает флаги в регистре статуса (у STM32).

    DR объявлен как vu16, если заменить на vu8, то лишнего "чтения" не происходит. В новой версии поведение правильное, поэтому и решился.

  12. Попробовал arm-kgp-eabi-mingw64-20130224-PROCYON.7z

     

    Не собирается(

    compile.  main.o
    d:/gcc/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -fpack-struct -Wpadded -g -Os  -I . -I d:/gcc/lib/stm32/inc -gdwarf-2 -c main.c -o main.o
    
    linker..
    d:/gcc/arm-kgp-eabi-procyon/bin/arm-kgp-eabi-gcc -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wl,--gc-sections,-Map=test_fp_v1.ite2.elf.map,-cref,-u,Reset_Handler -I . -I d:/gcc/lib/stm32/inc -L . -L d:/gcc/arm-kgp-eabi-procyon/arm-kgp-eabi/lib/thumb/cortex-m4f -T STM32F407VG.ld  main.o --output test_fp_v1.ite2.elf
    
    d:/gcc/arm-kgp-eabi-procyon/bin/../lib/gcc/arm-kgp-eabi/4.9.0/../../../../arm-kgp-eabi/bin/ld.exe: error: main.o uses VFP register arguments, test_fp_v1.ite2.elf does not
    d:/gcc/arm-kgp-eabi-procyon/bin/../lib/gcc/arm-kgp-eabi/4.9.0/../../../../arm-kgp-eabi/bin/ld.exe: failed to merge target specific data of file main.o

     

    Не подскажите, что мы обычно делаем в таком случае?

  13. Как уже рекомендовали MOXA NPort 51xx.

    Использовали повсеместно, где нужно решить задачу проброса rs232/rs485 через существующую сеть Ethernet.

    Варианта решения два:

    1. Можно купить два преобразователя и спарить их. Получается RS232 на входе и на выходе, а посередине Ethernet.

    2. Если софт на ПК, то можно купить один преобразователь и подключить его по Ethernet к ПК.

    На ПК ставится драйвер, и в системе появляется еще один com-порт, через который софт может рулить камерой.

  14. Да это частота внешнего кварца. Библиотечный файл можно и не править, достаточно объявить это определение, например так:

    #ifndef __GLOBALS_H
    #define __GLOBALS_H
    
    #define HSE_VALUE ((uint32_t)4096000)
    
    #include "stm32f10x.h"
    #include "stm32f10x_conf.h"

    Объявить в каком файле?

    В stm32f10x_conf.h (любом .h-файле, вызаваемом из stm32f10x_conf.h) или в совершенно произвольном месте?

    А может в ключах компилятора?

     

    А если у меня частота кварца 12МГц, то какая будет частота PLL? А если мне нужна другая частота PLL?

     

    Спрошу по-другому: можно ли библиотеке указать частоту кварца 12МГц и частоту PLL 72МГц? И чтоб при этом все делители для UART рассчитывались правильно.

  15. Нет, HSE_VALUE я установил 4096000

     

    #if !defined  HSE_VALUE
    #ifdef STM32F10X_CL   
      #define HSE_VALUE    ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
    #else 
      #define HSE_VALUE    ((uint32_t)4096000) /*!< Value of the External oscillator in Hz */
    #endif /* STM32F10X_CL */
    #endif /* HSE_VALUE */

    Это частота внешнего кварца, а не частота с PLL. Точно.

    Т.е. Вы поправили библиотечный файл?

  16. Господа программисты, особенно начинающие, обратите серьезное внимание на решение от Ксении.

    Хватит уже думать на уровне инструкций, переходите на уровень управления данными!

    union и struct позволяют сделать код в разы "читабельней" и "управляемей".

    Завтра вместо DS18B20 возьмете DS1820 и будете по всему коду искать сдвиги и прогие логические операции?!

     

    uint16_t temp_18b20()
    {
      union {
        unsigned char byte[2];
            uint16_t  word;
          struct
           {
          uint16_t  ds18b20_f:4;
              uint16_t  ds18b20_i:8;
            };
            struct
            {
               uint16_t  ds1820_f:1;
               uint16_t  ds1820_i:8;
            };
            struct
            {
               uint16_t  ds_uni_f:N // ваше число бит для дробной части
               uint16_t  ds_uni_i:8; // целая часть температуры 
            }
      } temp;
    
      ...
      temp.byte[1] = TD_receive_byte();
      temp.byte[0] = TD_receive_byte();
       ...
      return temp.ds_uni_i;
    }

     

    Меняете в одном месте N и все!

  17. Если оно не соответствует Вашему кварцу, то и расчет будет не верным. У меня кварц на 4096000, что отличается от дефолтного в 2 раза, вот тут то и были грабли.

    Т.е. Вы задали HSE_VALUE = 36864000 ?

    Фиксированный умножитель на 9 Вас устраивает?

    В моем случае 12МГц умноженые на 9 давали не работоспособные 108 МГц и правка HSE_VALUE = 108000000 не спасала((

  18. В прочем с этим я разобрался. :)

    И какое же правильный ответ?

    Определить HSE_VALUE?

     

    1. По поводу OVER8.

    В других МК он есть на месте 15 бита. В F100 он жестко обнулен, что соответствует 16 выборкам.

    Позицию бита можно было узнать из RM на дригие МК или по маске из библиотеки.

    В RM на ваш МК можно найти фразу, что начиная с 14 бита по 31 в регистре CR1 железные нули.

     

    2. По поводу HSE_VALUE.

    Я не фанат стандартной библиотеки, но когда только она появилась и долгое время после имел

    некоторые проблемы как раз с HSE_VALUE. Дело в том, что для внешнего кварца у STM приняты

    стандартные значения в 8 или 25 МГц, а я (уж так сложилось исторически) применяю кварцы на

    12 МГц. Делители библиотека рассчитывает исходя из заданного HSE_VALUE и стандартного для

    указанного семейства кварца. Я правил код библиотеки под себы, но это великое зло.

    Интересно, это до сих пор так? (вопрос разобравшемуся человеку :))

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