ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
396541 Топик полностью
Vladimir Ljaschko (23.03.2013 12:56, просмотров: 199) ответил SciFi на В смысле "не нужно подсказывать компилятору, как генерить более оптимальный код"? Другими словами, "ресурсы таки на пределе, надо брать камень пожирнее" :-)
Ни фига не на пределе, просто использую макросы + инлайны вместо того, чтобы писать а-ля ассемблер. Например вот так. Имею право? Хочу им пользоваться! :)  /* name var bit */ FLAG ( eeprom_good ,flags, 0x0001U ) FLAG ( low_power_enable ,flags, 0x0002U ) FLAG ( factory_flag ,flags, 0x0004U ) FLAG ( service_calibration ,flags, 0x0008U ) FLAG ( remote ,flags, 0x0010U ) FLAG ( show_value ,flags, 0x0020U ) FLAG ( blink ,flags, 0x0040U ) FLAG ( missing_pulses ,flags, 0x0080U ) FLAG ( remote_change_enabled ,flags, 0x0100U ) FLAG ( booster_filled ,flags, 0x0200U ) FLAG ( refilling ,flags, 0x0400U ) FLAG ( conc_change_enable ,flags, 0x0800U ) FLAG ( delivery_passive ,flags, 0x1000U ) FLAG ( start_user_menu ,flags, 0x2000U ) FLAG ( process_happened ,flags, 0x4000U ) FLAG ( feed_bin_filled ,flags, 0x8000U ) // Type K FLAGS_VARIABLE ( flags ) #pragma inline=forced uint GetFlag(uint name); #pragma inline=forced void OnFlag(uint name); #pragma inline=forced void OffFlag(uint name); #pragma inline=forced void ToggleFlag(uint name); /* enumeration of flags */ enum { #define FLAG( name, var, bit) name, #define FLAGS_VARIABLE(var) #include "k__flags.h" #undef FLAG #undef FLAGS_VARIABLE }; /* generation of flag bits masks */ #define FLAG( name, var, bit) enum { m_##name=(bit)}; #define FLAGS_VARIABLE(var) #include "k__flags.h" #undef FLAG #undef FLAGS_VARIABLE /* generation of extern var */ #define FLAG(name, port, bit) #define FLAGS_VARIABLE(var) extern volatile unsigned int var; #include "k__flags.h" #undef FLAG #undef FLAGS_VARIABLE // generation of GET functions unsigned int GetFlag( unsigned int name) { switch (name) { #define FLAG( name, var, bit) case name: return (var & bit); #define FLAGS_VARIABLE(var) #include "k__flags.h" #undef FLAG #undef FLAGS_VARIABLE default: return 0; } } // generation of ON flag void OnFlag( unsigned int name) { switch (name) { #define FLAG(name, var, bit) case name: var|=bit; return; #define FLAGS_VARIABLE(var) #include "k__flags.h" #undef FLAG #undef FLAGS_VARIABLE }} // generation of OFF flag #pragma diag_suppress=Pe068 void OffFlag( unsigned int name) { switch (name) { #define FLAG(name, var, bit) case name: var&=~bit; return; #define FLAGS_VARIABLE(var) #include "k__flags.h" #undef FLAG #undef FLAGS_VARIABLE }} #pragma diag_warning=Pe068 // generation of TOGGLE output functions void ToggleFlag( unsigned int name) { switch (name) { #define FLAG(name, var, bit) case name: var^=bit; return; #define FLAGS_VARIABLE(var) #include "k__flags.h" #undef FLAG #undef FLAGS_VARIABLE }}