Свежие обсуждения
Микроконтроллеры

Поясните по Си

1 3 8

Wladimir_TS, почему С++ - ужас? Из языков, с которыми я имел дело, С++ мне больше всех нравится.

 

Программа из полусотни строк (2 цикла 5 условий, 2 отработчика прерываний) откомпилировалась в 34 кБ кода !!!!!!! а должна в TINY2313 влезть - что за ужас такой такой, где надо и что компилятору накрутить. На ассемблере я в меньшее число-б строк уложился....но надо на это ужасном Си делать, таково ТЗ.

 

Swamp_Dok: Swamp_Dok ◊
сегодня, 13:22
Wladimir_TS, почему С++ - ужас? Из языков, с которыми я имел дело, С++ мне больше всех нравится.

По дальности на которое у меня уехала крыша при попытке его изучить - объектное программирование видимо придумано наркомананми, токсикоманами и переспективными пациентами лечебниц особого профиля - ибо логика в нём есть но НАСТОЛЬКО ИЗВРАЩЕННАЯ что просто ужастЪ....

Мне понятна логика железа - если я представляю как на уровне железа работает процессор, то и пишу на ассемблере - я понимаю что делает каждая команда на уровне сигналов - наверно так мозги устроены...

 

Каждому своё.
Да и я ведь дитя нового поколения, люди все удаляются от хардвара.
Просто вы ведь начинали, я так понимаю, с процедурных языков, а там ведь совсем другой подход, и мозги соответственно "заточены" под процедурные языки, а перенастроить мозг очень сложно.
Мне, например, довольно сложно писать на языке ассемблера, и что-то сложно на нем я вряд ли осилю. Асмом больше из любопытства интересовался.
Начинал с паскаля, но буквально через месяц-два занялся изучением С++, и никуда потом от него не ушел. Приходилось конечно и с многими другими языками дело иметь, но С++ остается любимым и частоиспользуемым.
А работу процессора я совсем смутно представляю - в очень общих чертах.

 

Я застал еще программирование с пультов - когда выдавали с пульта адрес и команду двоичным кодом.

А с работой процессор как-то заморачивался исследую работу Х1-53 - там управляющий прибором процессор собран на "рассыпухе" (около 80 корпусов мелкой логики + отдельно аппаратный умножитель 16х16 + блок микропрограмного автомата - вся логика работы процессора во множественный 565РТ4 увы более половины с "битыми" ячейками). Думал - думал - вот решил нафиг выкинуть сие чудо и воткнуть что-то даже 8 разрядное при частоте 20 МГц против 6,12 у штатного 8 р порвут 24/32 (данных/программ)....

В общем включил оптимизацию О1 (чего это) в настройках и программа ужалась до 650 байт...

PORTD ^= 1PD0 - что это значит

 

^= - это XOR в сишной интерпретации.
PORTD ^= 1PD0 можно записать так еще: PORTD = PORTD ^1PD0;

 

Странный какой-то идентификатор, начинающийся на цифру - 1PD0.
Как минимум не каждый сишный препроцессор такое проглотит, а в самом Си идентификаторы не могут начинаться на цифру.
Не опечатка?

 

Да это константа какая-то наверняка, не может идентификатор на цифру начинаться.

 

Имя макроса (то что после define) тоже вряд ли может начинаться на цифру, но копаться в стандарте С лень. Во всяком случае препроцессор из состава gcc такое не проглотит:


boo@verhneeboo:~$ cpp
#define 1TEST
# 1 "<stdin>"
# 1 "<command-line>"
# 1 "<stdin>"
<stdin>:1:9: error: macro names must be identifiers

 

boo2: boo2сегодня, 16:01

Странный какой-то идентификатор, начинающийся на цифру - 1PD0.
Как минимум не каждый сишный препроцессор такое проглотит, а в самом Си идентификаторы не могут начинаться на цифру.
Не опечатка?

Странно - оно само происходит при cutЭндpasteнге Почему-то появляется 1 вначале - просто PD1 - зарезервировано (avr.h по моему) и равно 1

Программу удалось откомпилировать - но старанно - есть условие
IF A=B {

IF C=D {...}
ELSE {...}
}
ELSE {...}

Так вот при прогоне в симуляторе - он не выходит из этого условия, хотя после него идет текст программы.

Как сделать, что-бы он при окончании выполнегия содержимого любого {...} продолжил далее а не крутился на месте ?

Все это в осноовном цикле программы