Jump to content

    

artemkad

Свой
  • Content Count

    1556
  • Joined

  • Last visited

Everything posted by artemkad


  1. При загрузке герберов JLCPCB появляется предупреждение "... .GKO(Board Outline Layer):Gerber file with a board outline". Кто-то с этим встречался и что-бы это могло значить?
  2. А в какой их сохранять? Надо-же как-то производителю сообщить по какой линии резать плату. Ну уж точно не в файле меди. Присутствует и определяется как файл контура. Именно на этот файл и ругается.
  3. Не похоже. Иначе ты бы не пытался фантазировать о том как можно было-бы сделать дешевле, а использовал то, что есть здесь и сейчас. Я уже это слышал - лет 5 назад. Думаю лет через 5 буду слышать аналогичное...
  4. Это не сферический конь. Я описал историю рынка GSM-модулей за последние 15 лет и практика работы на нем SimCom которая раз за разом предлагала GSM-модули с аналогичным или большим функционалом по цене ниже или в разы ниже чем были представлены на рынке. И этим вышибла с этого рынка практически всех, кто царствовал на нем в середине нулевых. Между Sim800 и Sim800C особой разницы в функционале нет, но разница в цене раза в 1,5. Sim868 имеет на борту GPS-модуль, но он сейчас дешевле чем Sim900R сейчас или ранее.
  5. Бывает. Стоимость изделия зависит как от стоимости того, что на нем есть, так и от величины накладных расходов которые слабо зависят от объемов и делятся на число выпускаемых изделий. Т.е. чем больше объем продаж, тем меньше вторая часть стоимости. И если новая фича стоит меньше чем снижение стоимости накладных расходов из-за роста продаж - она может стоимость изделия даже снижать.
  6. Если добавление этих фич увеличивает объемы продаж чипсетов в сотни раз, а значит и позволяет развернуть массовое производство вместо серийного - они идут в нагрузку бесплатно.
  7. Вау, а слона-то я и не заметил....
  8. С тем, что 3G не стал столь-же массовым как 2G который поддерживают не только терминалы 2G, но и многие 3G телефоны. Потому отказ от 3G в пользу 4G сохранив разговорную базу на 2G не приведет к массовой потере клиентов. А вот поддерживать 3G и 4G одновременно уже накладно как по деньгам, так и по частотам. Потому операторам выгодно развивать уже широко доступный 4G(сюда-же перетянуть IoT) и забить на 3G при сохранении 2G.
  9. Не хороните раньше времени 2G - они еще долго проработают. А вот 3G действительно не жильцы...
  10. А как на счет перейти на OpenCellID или Mozilla Location Service?
  11. "Порошковые" 3Д-принтеры

    Поиск по "3d sls" рулит. К примеру тут
  12. И смысл такому уподабливаться? Тут-же хрен знает какой результат получится. Поля-то от старых значений не чистятся.
  13. Ну, я бы не рекомендовал это для начинающих, но в IAR это вроде работает: sPPL0 a; a=(sPPL0){.CR.M=5,.CR.N=6}; Правда код там "оверкилл" - сперва затягивается вся структура целиком в регистры(служебную память), модифицируется нужное, а потом возвращается назад.
  14. Оптимизация констант.

    Не подскажет ли кто как заставить 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
  15. Оптимизация констант.

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

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

    Ну, в конечном итоге я так и сделал. Собственно так и было изначально, но раздражало размещение рядом с ними перечисления с именами, в результате чего бесконтрольно проходили ошибки когда имя перенес, а добавить 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_ - собственно сама битовая маска. Ну и приятным бонусом оказался контроль за переполнением числа бит в маске.
  18. Оптимизация констант.

    Ну, мне сложнеепроще - у меня AVR...
  19. Оптимизация констант.

    Эти константы - битовые маски. Если они компилируются в код, то от них остается только операция с одним(нужным) битом. А если они остаются в памяти, то там помимо самой памяти еще и загрузка с проверками всего лонга.
  20. Да хоть на Гугл - страницу 404 он тебе всегда отправит.
  21. Типовая проблема. Только не в шумности, а в превышении минимального или максимального порога. Собственно в даташите прямо указана причина выключения: Причем в отличие от более старых модулей в Sim800 снизили верхний порог до 4.4В
  22. На сколько помню, в момент регистрации модуль начинает связь на максимальной мощности сигнала. Т.е. просадки можно оценить сразу и без специальных команд.
  23. Возник тут вопросик... Если инициализировать массив к примеру во Флеше МК, то все что явно не указано iar заполнит нулями. Т.е. вот так: __flash uint8_t hello_world_buf[1000] = "hello world"; все кроме первых 11 байт будет забито нулями. А как-бы заставить компилятор забить чем-то другим(например 0xFF)?
  24. В основном временем записи. Единственное вменяемое. Если массив хоть чем нибудь инициализирую в программе там появляются нули еще до попадания линкеру. Если без инициализации, там и так 0xFF.
  25. Тогда тем более не нужен. Проблема возникает когда утечка от помехи через порт на питание превышает ток потребления схемы от этого питания.