Jump to content

    

artemkad

Свой
  • Content Count

    1549
  • Joined

  • Last visited

Community Reputation

0 Обычный

About artemkad

  • Rank
    Профессионал

Контакты

  • Сайт
    http://
  • ICQ
    224

Информация

  • Город
    Киев

Recent Profile Visitors

5266 profile views
  1. С тем, что 3G не стал столь-же массовым как 2G который поддерживают не только терминалы 2G, но и многие 3G телефоны. Потому отказ от 3G в пользу 4G сохранив разговорную базу на 2G не приведет к массовой потере клиентов. А вот поддерживать 3G и 4G одновременно уже накладно как по деньгам, так и по частотам. Потому операторам выгодно развивать уже широко доступный 4G(сюда-же перетянуть IoT) и забить на 3G при сохранении 2G.
  2. Не хороните раньше времени 2G - они еще долго проработают. А вот 3G действительно не жильцы...
  3. А как на счет перейти на OpenCellID или Mozilla Location Service?
  4. "Порошковые" 3Д-принтеры

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

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

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

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

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

    Эти константы - битовые маски. Если они компилируются в код, то от них остается только операция с одним(нужным) битом. А если они остаются в памяти, то там помимо самой памяти еще и загрузка с проверками всего лонга.
  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. Да хоть на Гугл - страницу 404 он тебе всегда отправит.
  14. Типовая проблема. Только не в шумности, а в превышении минимального или максимального порога. Собственно в даташите прямо указана причина выключения: Причем в отличие от более старых модулей в Sim800 снизили верхний порог до 4.4В
  15. На сколько помню, в момент регистрации модуль начинает связь на максимальной мощности сигнала. Т.е. просадки можно оценить сразу и без специальных команд.