Ср май 23, 2018 22:26:49
Ср май 23, 2018 22:47:47
Ср май 23, 2018 22:59:48
Сделать каждый бит объектом -- это офигенная затея.
Ср май 23, 2018 23:18:19
HAL_StatusTypeDef HAL_ADC_Init(ADC_HandleTypeDef* hadc)
{
HAL_StatusTypeDef tmp_hal_status = HAL_OK;
uint32_t tmpCFGR1 = 0U;
/* Check ADC handle */
if(hadc == NULL)
{
return HAL_ERROR;
}
/* Check the parameters */
assert_param(IS_ADC_ALL_INSTANCE(hadc->Instance));
assert_param(IS_ADC_CLOCKPRESCALER(hadc->Init.ClockPrescaler));
assert_param(IS_ADC_RESOLUTION(hadc->Init.Resolution));
assert_param(IS_ADC_DATA_ALIGN(hadc->Init.DataAlign));
assert_param(IS_ADC_SCAN_MODE(hadc->Init.ScanConvMode));
assert_param(IS_FUNCTIONAL_STATE(hadc->Init.ContinuousConvMode));
assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DiscontinuousConvMode));
assert_param(IS_ADC_EXTTRIG_EDGE(hadc->Init.ExternalTrigConvEdge));
assert_param(IS_ADC_EXTTRIG(hadc->Init.ExternalTrigConv));
assert_param(IS_FUNCTIONAL_STATE(hadc->Init.DMAContinuousRequests));
assert_param(IS_ADC_EOC_SELECTION(hadc->Init.EOCSelection));
assert_param(IS_ADC_OVERRUN(hadc->Init.Overrun));
assert_param(IS_FUNCTIONAL_STATE(hadc->Init.LowPowerAutoWait));
assert_param(IS_FUNCTIONAL_STATE(hadc->Init.LowPowerAutoPowerOff));
по наблюдениям, это общая болезнь эмбеддеров - думать о битах, а не о том, что они означают. Не стоит ею болеть.
turn_pll_on(RCC_CFGR_PLLMUL8); /* run MCU at 32mHz */
Ср май 23, 2018 23:32:28
Ср май 23, 2018 23:53:39
turn_pll_on(RCC_CFGR_PLLMUL8); /* run MCU at 32mHz */
namespace Pll2
{
void enable()
{
RCC->CR |= RCC_CR_PLLON;
while (!(RCC->CR & RCC_CR_PLLRDY)) {}
}
template<PllSrc pllSrc, uint32_t mul, uint32_t prediv = 1>
void init()
{
static_assert(mul >= 2 && mul <= 16, "PLL mul is out of range!");
static_assert((pllSrc == PllSrc::HseDivPrediv && prediv >= 1 && prediv <= 16) ||
(pllSrc == PllSrc::HsiDiv2 && prediv == 1), "PLL prediv is out of range!");
_assert_(!isEnabled());
uint32_t cfgr = RCC->CFGR & ~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLMUL | RCC_CFGR_USBPRE);
constexpr uint32_t baseClk = (pllSrc == PllSrc::HsiDiv2) ? HsiValue / 2 : HseValue / prediv;
if constexpr (baseClk * mul <= 50'000'000) cfgr |= RCC_CFGR_USBPRE;
RCC->CFGR = cfgr | uint32_t(pllSrc) | ((mul - 2) << RCC_CFGR_PLLMUL_Pos);
if constexpr (pllSrc == PllSrc::HseDivPrediv)
{
RCC->CFGR2 = RCC->CFGR2 & ~RCC_CFGR2_PREDIV | (prediv - 1);
}
enable();
}
}
Чт май 24, 2018 00:52:08
В том, что приводит Рефлектор, больше фич языка, чем ооп.
Чт май 24, 2018 02:53:48
Чт май 24, 2018 06:27:36
Чт май 24, 2018 10:44:34
Чт май 24, 2018 13:05:29
Чт май 24, 2018 14:42:08
Чт май 24, 2018 15:01:44
Чт май 24, 2018 15:24:05
стабильный релиз gcc7 вышел год назад.
вы приведенный выше показательный пример с неймспейсом вместо класса сознательно пропустили, или просто не заметили?)
Чт май 24, 2018 15:45:12
Там было, что замечать? Он до степени смешения выглядит, как ООП, хоть ООП в чистом виде не является. Это, типа, котлеты из фальшивого зайца. Радость только для тех, кто может себя убедить силой.
Point p;
p.x = 10;
Чт май 24, 2018 16:07:13
Простые функции внутри namespace выглядят как ООП? Ладно, а что насчет такого кода:
- Код:
Point p;
p.x = 10;
Это С или С++? Класс или обычная структура? А если кто-то скажет, что выглядит как ООП, то перестанешь пользоваться структурами?
Чт май 24, 2018 16:24:09
Волшебные числа? Отлично. Это добавит перчика там, где его и без того в избытке.
CMSIS практически сплошняком состоит из структур, но тамошним программистам не пришло в голову рядить их в OOP-like одежды. С позиций вашего подхода -- это необъяснимо.
Чт май 24, 2018 17:19:05
Reflector",url="/forum/viewtopic.php?p=3384641#p3384641 писал(а):Проблема в том, что ты пытаешься это представить как недостаток gcc 7 не имея для этого реальных оснований.
Почему же, вполне объяснимо, - это суть придумка, как сэкономить на квалификации программистов, допуская к кодингу джуниоров-индусов, которые и С нормально освоить не могут.
Пт май 25, 2018 09:42:48
Еще раз, обращаясь ко всем оппонентам в этом диспуте: ООП -- инструмент замечательный, новые правила и конструкции языка -- достижение. Только это не означает, что всем нужно подорваться строчить по три экрана кода, чтобы три бита перевернуть один раз во всей программе. Бред это.
Если хотелось просто показать изящество языка, нужно первым дело было придумать пример это иллюстрирующий. А на приведенном примере -- это скорее профанация.
static char msg_in[16] = "Hello World!";
static char msg_out[16] = {};
using usart = Usart2<>;
usart::init<PinA<2, 7>, PinA<3, 7>>(115200);
usart::initChannelTx<Dma1Ch7>(msg_in, 12);
usart::initChannelRx<Dma1Ch6>(msg_out, 12);
usart::enable(UsartCr3::DmaReceiver | UsartCr3::DmaTransmitter);
while (!Dma1Ch6::isInterruptReady(DmaFlag::TransferComplete)) {}
Пт май 25, 2018 11:38:55