Jump to content

    

artemkad

Свой
  • Content Count

    1556
  • Joined

  • Last visited

Posts posted by artemkad


  1. 30 minutes ago, Eddy_Em said:

    А нафига границы платы в отдельный гербер сохранять? Делать что ли нечего?

     

    А в какой их сохранять? Надо-же как-то производителю сообщить по какой линии резать плату. Ну уж точно не в файле меди.

    2 hours ago, _pv said:

    ну видимо отсутствует файл .gko с контуром платы

    Присутствует и определяется как файл контура. Именно на этот файл и ругается.

  2. 15 hours ago, POLL said:

    Меня не интересует тенденции за 15 лет - мне нужно здесь и сейчас.

    Не похоже. Иначе ты бы не пытался фантазировать о том как можно было-бы сделать дешевле, а использовал то, что есть здесь и сейчас.

    15 hours ago, POLL said:

    А потому что - они устарели, нужно скорее все реализовать, избавится от них.

    Я уже это слышал - лет 5 назад. Думаю лет через 5 буду слышать аналогичное...

  3. 16 minutes ago, POLL said:

    Меня сферический конь в вакууме не интересует.

    Это не сферический конь. Я описал историю рынка GSM-модулей за последние 15 лет и практика работы на нем SimCom которая раз за разом предлагала GSM-модули с аналогичным или большим функционалом по цене ниже или в разы ниже чем были представлены на рынке.  И этим вышибла с этого рынка практически всех, кто царствовал на нем в середине нулевых.

     

    23 minutes ago, POLL said:

    И цены на модули растут - от минимальной конфигурации до максимальной.

    Между Sim800 и Sim800C особой разницы в функционале нет, но разница в цене раза в 1,5. Sim868 имеет на борту GPS-модуль, но он сейчас дешевле чем Sim900R сейчас или ранее.

  4. 3 hours ago, POLL said:

    Бесплатно ничего не бывает. Все это плюс к цене.

    Бывает. Стоимость изделия зависит как от стоимости того, что на нем есть, так и от величины накладных расходов которые слабо зависят от объемов и делятся на число выпускаемых изделий. Т.е. чем больше объем продаж, тем меньше вторая часть стоимости. И если новая фича стоит меньше чем снижение стоимости накладных расходов из-за роста продаж - она может стоимость изделия даже снижать.

  5. 45 minutes ago, POLL said:

    блютуз, навигация - все это стоит денег.

    зачем платить за то, что в проекте не нужно?

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

  6. 4 hours ago, RusikOk said:

    с чем это связано?

    С тем, что 3G не стал столь-же массовым как 2G который поддерживают не только терминалы 2G, но и многие 3G телефоны. Потому отказ от 3G в пользу 4G сохранив разговорную базу на 2G не приведет к массовой потере клиентов. А вот поддерживать 3G и 4G одновременно уже накладно как по деньгам, так и по частотам. Потому операторам выгодно развивать уже широко доступный 4G(сюда-же перетянуть IoT) и забить на 3G при сохранении 2G. 

  7. 8 hours ago, Arlleex said:

    artemkad, посмотрите мой ответ Сергею пару сообщениями выше. Повторюсь, этот код не сделает подобие a |= 5 << Mpos | 6 << Npos.

    И смысл такому уподабливаться? Тут-же хрен знает какой результат получится. Поля-то от старых значений не чистятся.

  8. On 7/30/2019 at 8:14 PM, Arlleex said:

    Может есть какой-нибудь трюк, все-таки позволяющий атомарно записать несколько битовых полей структуры?

    Имеется, допустим,

    
    // битовые представления регистров
    typedef union
    {
      struct
      {
        u32 M            : 15UL;
        u32 __RESERVE1__ :  1UL;
        u32 N            :  8UL;
        u32 EN           :  1UL;
        u32 SEL          :  1UL;
        u32 RDY          :  1UL;
        u32 __RESERVE2__ :  5UL;
      };
      u32 RAW;
    }sPLL0СR;
    
    ...
    
    // описание регистров периферии
    typedef struct
    {
      ...
      sPLL0СR СR;
      ...
    }sPPL0;

     

    Теперь я хочу одним махом каким-то образом сразу инициализировать поля M и N в структуре CR. Возможно ли такое средствами языка?

    Ну, я бы не рекомендовал это для начинающих, но в IAR это вроде работает:

    sPPL0 a;
    
    a=(sPPL0){.CR.M=5,.CR.N=6};

    Правда код там "оверкилл" - сперва затягивается вся структура целиком в регистры(служебную память), модифицируется нужное, а потом возвращается назад.

  9. 1 hour ago, jcxz said:

    Это уже паранойя.

    А не боитесь, что в другом месте программы забудете 1 << или ещё чего-нить? Или что вместо NAME1 напишете NAME2?

    Забыть(ничего не делать) проще чем что-то сделать намеренно. Да и в реальности у меня, естественно, более вменяемые названия чем NAMEx.

  10. 15 minutes ago, jcxz said:

    А зачем такое вообще нужно? Если просто в коде написать 1ul << bp_NAME1 - неужто сам компилятор не сможет вычислить необходимую константу?

    В коде для компилятора 1ul<<bp_NAME1 и просто bp_NAME1 равнозначны т.е. не вызывают каких либо сообщений, а значит приходим к исходной проблеме "имя перенес, а добавить bm_ забыл" только теперь забыл добавить 1ul<< . 

  11. 10 hours ago, Сергей Борщ said:

    Перенесите ваши константы в заголовочный файл и добавьте к ним квалификатор static.

    Ну, в конечном итоге я так и сделал. Собственно так и было изначально, но раздражало размещение рядом с ними перечисления с именами, в результате чего бесконтрольно проходили ошибки когда имя перенес, а добавить bm_ забыл. Использование сишного файла нужно было именно для скрытия исходных имен взятых из enum от остального кода. Конечный результат выглядит примерно так:

    State.h

    #define EVENT_EVENTS(name)  bp_##name,	 
    enum  {
    #include "events_list.h"
    };
    #undef EVENT_EVENTS
    
    #define EVENT_EVENTS(name)  static  U32 const bm_##name = ((long)1<<bp_##name);
     
    #include "events_list.h"
    
    #undef EVENT_EVENTS

     Вспомогательный events_list.h

    #ifdef	EVENT_EVENTS
    
    EVENT_EVENTS(NAME1)	  
    EVENT_EVENTS(NAME2)  
    EVENT_EVENTS(NAME3)	  
    EVENT_EVENTS(NAME4)	  
    EVENT_EVENTS(NAME5)	  
    EVENT_EVENTS(NAME6)	  
    EVENT_EVENTS(NAME7)  
    
    #endif

    Итого, State.h из файла с перечисленными именами битов создает два набора констант. Один набор с добавлением bp_ - номер позиции, второй в добавлением bm_  - собственно сама битовая маска. Ну и приятным бонусом оказался контроль за переполнением числа бит в маске.

  12. Эти константы - битовые маски. Если они компилируются в код, то от них остается только операция с одним(нужным) битом. А если они остаются в памяти, то там помимо самой памяти еще и загрузка с проверками всего лонга.

  13. Не подскажет ли кто как заставить IAR вместо выделения памяти (любой) на константы сразу использовать их значение в коде. 

     

    При этот сами константы иннициализируются в отдельном Си-файле.

    U32 const bm_INPUT_DRIVER_TRUNK = ((long)1<<INPUT_DRIVER_TRUNK);	

    И объявляются в хеадере:

    extern U32 const bm_INPUT_DRIVER_TRUNK;	

    подключаемом к файлам в котором они используются:

    ЗЫ. Вытаскивать иннициализацию из Си-шного файла нельзя(значение которым иннициализируется константа берутся в этом файле и вытаскивать их оттуда наружу нельзя), замена на  #define малоперспективна т.к. константы сами формируются автоматом из другого файла через  #define,  Multi file compilation использовать крайне не хочется потому как надо перебирать под него кучу кода в других в т.ч. не моих файлах.

    PPS. Что-бы было понятней, пожалуй приведу текущее содержимое:

    State.c

     #include "State.h"
    
    #define EVENT_EVENTS
    
    #define msg_EVENT(name)  name,	 
    enum events_status   {
    #include "events_list.h"
    };
    #undef msg_EVENT
    
    #define msg_EVENT(name)    U32 const bm_##name = ((long)1<<name);
     
    #include "events_list.h"
    
    #undef msg_EVENT
    
    #undef EVENT_EVENTS		
    

    State.h

    #define EVENT_EVENTS						///
    
    #define msg_EVENT(name)  extern  U32 const bm_##name;
     
    #include "events_list.h"
    
    #undef msg_EVENT
    
    #undef EVENT_EVENTS							///
    

    Ну и впомогательный events_list.h

    #ifdef	EVENT_EVENTS
    
    msg_EVENT(EVENT_1)	  
    msg_EVENT(EVENT_2)  
    msg_EVENT(EVENT_3)	  
    msg_EVENT(EVENT_4)	  
    msg_EVENT(EVENT_5)	  
    
    #endif

     

  14. On 5/30/2019 at 7:25 PM, salara said:

    Причина проблеммы была в источниках питания, причем не по токовой нагрузке, а по "шумности-пульсациям".

    Типовая проблема. Только не в шумности, а в превышении минимального или максимального порога. Собственно в даташите прямо указана причина выключения:

    Quote

    Abnormal power off: over-voltage or under-voltage automatic power off.

    Причем в отличие от более старых модулей в Sim800 снизили верхний порог до 4.4В

     

  15. 16 hours ago, antis said:

    Как у SIM800C установить максимальную мощность передатчика?

    Нужно для проверки работы блока питания, отсутствия просадок напряжения.

     

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

  16. 13 hours ago, haker_fox said:

    Скоростью записи? Износом флеша?

    В основном временем записи. 

    13 hours ago, adnega said:

    Вовсе не единственное:

    Единственное вменяемое. Если массив хоть чем нибудь инициализирую в программе там появляются нули еще до попадания линкеру. Если без инициализации, там и так 0xFF.

  17. 1 minute ago, Arlleex said:

    У меня на 3.3В будет еще дисплей, EEPROM и куча других микросхем. Питание всего этого будет от поворота ключа зажигания - то есть в потреблении я не ограничен.

    Единственное - это у меня еще будут часы реального времени, для них требуется резервные 3.3В. Их я планирую через отдельный такой же DC/DC или LDO питать (только вход VBAT).

    Тогда тем более не нужен. Проблема возникает когда утечка от помехи через порт на питание превышает ток потребления схемы от этого питания. 

  18. 10 minutes ago, Plain said:

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

    Транзистор не нужен. Иначе утечка стабилитрона умноженная на коэффициент усиления транзистора на потреблении поставит крест.