До этого учился писать на асме для AVR.
Столкнувшись с Си понял, что жизнь непростая штука
я пользуюсь учебником по СИ http://vg.ucoz.ru/load/raznoe/kniga_uch ... /17-1-0-51 авторы которой Брайн Керниган и Денис Рич
и кратким руководством http://dfe.petrsu.ru/koi/posob/c/c.htm
Но у меня все равно остается куча вопросов
С вашего позволения я буду задавать их тут
1) столкнулся я с составными операциями
например мне до сих пор не понятна операция |=
единственное, что я про нее знаю - это то, что она выполняется справа налево..
вот пример кода где я ее использовал:
Код: Выделить всё
RCC->AHB1ENR |= 0b00000000000000000000000000001000; //RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);что означает эта операция?
программа нормально работает если просто оставить там знак равенства...
Но почему используют именно такую операцию? И при каких обстоятельствах один только знак равенства не сканает ?
сразу оговорюсь - я написал бинарное значение непросто так, а для того, что-бы улучшить читабельность кода...
2) а вот тут я использовал SPL
Код: Выделить всё
int main(void)
{
// Тактирование порта "Д"
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
// Настраиваем порты
GPIO_InitTypeDef ledinit; // создаем структуру
ledinit.GPIO_Mode = GPIO_Mode_OUT; // направление - выход
ledinit.GPIO_OType = GPIO_OType_PP; // Двухтактный выход
ledinit.GPIO_PuPd = GPIO_PuPd_NOPULL; // Без подтяжки
ledinit.GPIO_Speed = GPIO_Speed_2MHz; // Скорость низкая
ledinit.GPIO_Pin = (GPIO_Pin_13 | GPIO_Pin_12 | GPIO_Pin_14 | GPIO_Pin_15); // Светодиод LD3 на 12, 13, 14 и 15-ом выводе
GPIO_Init(GPIOD, &ledinit); // Функция, выполняющая настройку портов
Код: Выделить всё
GPIO_Init(GPIOD, &ledinit); // Функция, выполняющая настройку портов



