Jump to content

    

artemkad

Свой
  • Content Count

    1554
  • Joined

  • Last visited

Everything posted by artemkad


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

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

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

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

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

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

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

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