ARM gcc и стандарт c++0x



Захотелось мне странного – проверить, как обстоят дела с поддержкой новых фич стандарта c++0x компилятором GCC для ARM.

Для тестов использовался toolchain YAGARTO с GCC-4.6.0. Судя по официальным данным данная версия компилятора поддерживает стандарт не полностью, но большинство нововведений поддерживаются. Тестовая платформа — микроконтроллер AT91SAM7X512.

Для начала — минимальный тестовый код, который включает основные (IMHO) нововведения. Сам я пока поверхностно знаком с новым стандартом, поэтому и тестовый код соответствующий.

	_DBG("Init...\n");
	
	//Auto test int
	auto int_variable = 5;
	_DBG("Auto test int %d\n", int_variable); 

	//Auto test char *
	auto char_variable = "test";
	_DBG("Auto test char * %s\n", char_variable); 
        
        //decltype test
	int some_int;
	decltype(some_int) other_integer_variable = 5;
	_DBG("decltype test %d\n", other_integer_variable);

	//Range for test
	int my_array[5] = {1, 2, 3, 4, 5};
	for (int &x : my_array) {
    		_DBG("RF test %d\n", x);
	} 

	//Lambda test
	int nMax = [](int n1, int n2) {return (n1>n2) ? (n1) : (n2);} (56, 11);
	_DBG("Lambda test %d\n", nMax);


Скомпилился код с первого раза (сам не ожидал), главное указать опцию –std=c++0x для g++.
Далее прошиваем контроллер и ловим debug output:

Init…
Auto test int 5
Auto test char * test
decltype test 5
RF test 1
RF test 2
RF test 3
RF test 4
RF test 5
Lambda test 56


Результат: все тесты завершились успешно.

Данная статья не призывает поголовно переходить на новый стандарт — все было проделано just for fun :)

Может кто-то из Сообщества уже использует новый стандарт в полную силу и поделится опытом?

UPD: Немного пояснений по коду:


        //Auto test int
        auto int_variable = 5;
        _DBG("Auto test int %d\n", int_variable); 

        //Auto test char *
        auto char_variable = "test";
        _DBG("Auto test char * %s\n", char_variable); 


Пример демонстрирует «автовыведение» типа переменной. Вместо типа указано auto — в этом случае компилятор сам определяет тип исходя из контекста (в первом случае тип определяется как int, во втором — как const char *). Данный пример — это вырожденный случай (как замечено в комментариях), данная фича более применима при работе с шаблонами и анонимным кодом (об этом ниже).

//decltype test
        int some_int;
        decltype(some_int) other_integer_variable = 5;
        _DBG("decltype test %d\n", other_integer_variable);


decltype используется для определения типа переменной на этапе компиляции. В примере переменная some_int явно объявлена как int, переменная other_integer_variable объявлена как decltype(some_int) — другими словами, как переменная того же типа что и some_int.

//Range for test
        int my_array[5] = {1, 2, 3, 4, 5};
        for (int &x : my_array) {
                _DBG("RF test %d\n", x);
        } 


Этот пример демонстрирует новую конструкцию for, которая позволяет «пробежаться» по всем элементам массива/коллекции. Приведенный выше фрагмент аналогичен по функциональности коду
for (int i = 0; i < sizeof(my_array) /< sizeof(my_array[0]); i++ ) {
        _DBG("RF test %d\n", my_array[i]);
}


//Lambda test
        int nMax = [](int n1, int n2) {return (n1>n2) ? (n1) : (n2);} (56, 11);
        _DBG("Lambda test %d\n", nMax);


Это самая «выносящая мозг» штука :) Это лямбда выражение или «анонимный» код. По сути, компилятор позволяет писать код вне функции или метода класса. Данная тема очень обширна, поэтому лучше почитать об этом например здесь.
  • +4
  • 13 октября 2011, 13:57
  • e_mc2

Комментарии (40)

RSS свернуть / развернуть
Хм, странная реакция на статью. Вы бы хоть в комментариях написали, что конкретно вам не нравиться – новый стандарт, материал, или Вы считаете что С++ и микроконтроллеры несовместимы? Из здравой критики я могу сделать выводы а просто сливать статью – какой смысл?
0
  • avatar
  • e_mc2
  • 13 октября 2011, 17:03
Я новый стандарт пока так-же поковырял немного и оставил до лучших времен — пока не до него. А так штука шорошая, много всего вкусного. Мне более всего импонируют (помимо перечисленного) Variadic templates, constexpr и встроенный static_assert.
0
Да, пока стандарт в полной мере не поддерживается ни одним компилятором, но нововведения действительно интересные. Правда тема холиварная, мнигие считают, что это все излишки и «синтаксический сахар». Например многие считают что автовыведение типа- это зло и путь назад к нетипизированным языкам. В любом случае, как по мне, использовать новый стандарт в серьезных решениях пока рано.
0
В том-то и дело, что автовыведенеие — это выведение. компилятор определенно знает этот тип на этапе компиляции и может его проверить, вывести диагностические сообщения и т.д.
Конечно использовать auto вместо int бессысленно, а вот с шаблонами это реально удобно.
0
Дык я сам не против данной фичи, просто бытует такое мнение в т. ч. среди моих ближайших коллег. Вообще, многие воспринимают любые нововведения в язык в штыки.
0
у вас классные статьи по плюсам, если напишете по новому стандарту пару слов (с более жизненными примерами) — будет круто
0
Это моя первая статья по С++ на дном ресурсе – возможно Вы меня с кем-то путаете :) Что касается освещения нового стандарта – можно попробовать. Просто, судя изменению моего рейтинга после публикации статьи, я не уверен что данная тема является профильной для Сообщества.
0
ну вообще я neiver'у на комментарий отвечал, но вашу статью тоже было интересно почитать :)
0
Упс… :) Я бы сам с удовольствием выслушал развернутые комментарии neiver’а к новому стандарту
0
Ну вот, прошлись и по рейтингу. Видать, не любят здесь С++ :)
0
  • avatar
  • e_mc2
  • 13 октября 2011, 18:21
Ситуация нормализировалась, спасибо всем за поддержу!
0
Гм, язычок все мозговыносней и мозговыносней)

Добавь комментарии по каждой из этих фич. Что, зачем, как.
0
  • avatar
  • Vga
  • 13 октября 2011, 18:38
Сделано.
0
Нда, забавный синтаксис у анонимной функции. Дельфовый вариант мне больше нравится — function(n1, n2: Integer): Integer; begin Result:=Max(n1, n2); end; (возможно, где-то лишнюю ";" посадил). По крайней мере, «function» чуть логичней и понятней, чем "[]".
0
В C# похожий синтаксис:
(int n1, int n2) => {return n1>n2 ? n1 : n2;}

По моему, вполне удобно.
0
Удобно потому, что писать быстро?
Мои претензии к наглядности. Программы на С/С++ все больше напоминают шифрограммы. А если не прикладывать усилий к оформлению — так окончательно в них превращаются (беспределом в оформлении можно и Delphi абсолютно нечитабельным сделать, а он к этому чуть устойчивей).
+1
С наглядностью у данной группы языков всегда были проблемы. Причина — контекстно-зависимый синтаксис. Банальный пример на С:
static void some_fun(void) {
   int some_int;
   …
}

и
void some_fun(void) {
   static  int some_int;
   …
}

И там static и там static – но есть нюансы но в первом случае в первом случае значение ключевого слова «static» одно, во втором совершенно другое. В синтаксисе С++ ключевое слово static приобретает новое значение в зависимости от контекста. Поначалу это сильно сбивает с толку. Однако именно синтаксис С++ взят за основу для таких языков Java и C#.
0
С наглядностью у данной группы языков всегда были проблемы.
Угу. И не только поэтому. Собсна, наглядность никто в задачи и не ставил при их проектировании.
Однако именно синтаксис С++ взят за основу для таких языков Java и C#.
Еще бы, ведь С/С++ самый популярный. Не брать же синтаксис у паскаля — тогда на них даже не посмотрят.
0
Согласен — выбор был обусловлен именно популярностью С/С++ на тот момент. Таким образом снижали «порог вхождения» в новый язык. А по поводу паскаля – лично мне его синтаксис очень нравиться.
0
Стоит еще заметить — этот синтаксис нравится программистам. Плюются на него академики, за то, что он не мешает программисту наступать на имеющиеся грабли и раскладывать новые. Ну и еще потакает таким свойствам программиста, как нежелание набирать длинную писанину.
0
Как хорошо, что плюсы я изучал после лиспов. А то бы остаток жизни провёл с необратимыми повреждениями мозга.
0
  • avatar
  • Dzhus
  • 13 октября 2011, 20:26
Мы остановились, добившись успешной компиляции следующего:
for(;P("\n"),R-;P("""))for(e=C;e-;P("_"+(*u++/8)%2))P("" "+(*u/4)%2);
?)
0
//Range for test
        int my_array[5] = {1, 2, 3, 4, 5};
        for (int &x : my_array) {
                _DBG("RF test %d\n", x);
        } 

Давно было пора ввести конструкцию, аналогичную
for(x in my_array){}

в яваскрипте…
плохо, что делается не одинаково для разных языков…
0
Лучше бы по стандарту с99 нормальную статью написать, а то до сих пор вижу людей которые под 8мибитки «чарами», «шортами» и «ансигнетами» пользуются, а не раcсово верными типами в <inttypes.h> вроде uint8_t. =) И о inline рассказать =).

А на подходе уже новый стандарт c1x.
Более того разработан специальный стандарт для «слабых» процессоров с подсчетом на числах с фиксированной запятой и говорящим названием Embedded C.

Вот про эти темы я бы почитал.
С++ в основном для «большого» компьютера. ;)
+1
А я не согласен. Если уж сравнивать, то нужно пройтись по всем критериям: от постановки ТЗ, до удобства тестирования.
Я лично перешёл на С++, т.к. есть очень много средств от больших ПК, которые помогают удобно писать код. Не всю же жизнь под 8 бит писать? Железо развивается и нужно развиваться вместе с ним. Те, кто владеет объектным Си всегда будут в более удобном положении, т.к. на их стороне горы написанного кода, который только и ждёт своего применения в новых МК.

Языки C# и Java, как говорят, появились из-за того, что среднее время кодинга проекта у них меньше, чем у C++, не говоря уже про Си. А то что он там понятен или не понятен — это дело привычки. Я вот смотрю свой старый асм-код и диву даюсь :) не всё мне там после многих лет понятно.

П.С. И ещё, почему в примере кода комменты на английском? Тут все такие знатоки? Тогда почему бы не перейти на английский и в комментах к статье?
Я считаю одной из причин нашего вечного отставания в сфере IT — это трата лишнего времени на изучение английского (я не утверждаю, что он не нужен). Увы, но почему-то никто не рассматривает такого простого пояснения, что англоязычный программер воспринимает всё сразу, а любой другой — только после n-лет обучения и чтения MSDN (не забываем политическую географию — во многих странах, бывших колониях Англии, английский — государственный). Все стремятся подлизаться (да-да, иначе не могу назвать) к неизвестным богатым заграничным работодателям, которые по достоинству «оценят» ваш труд. При этом забывается, что и в России есть новое поколение, которое ещё не знает английского, но хочет быть в теме в том возрасте, в котором в теме их сверстники заграницей. Это замкнутый круг. Разомкнуть его можно, если на уровне мировоззрения поставить себе установку: «Я хочу, чтобы и у меня в стране были спецы, которые бы могли написать что-то не хуже WinAVR».
Если каждый будет тратить нескольки лет своей жизни на изучение английского, то помножьте это на тысячи программеров — вот вам одна из причин того, что я знаю только одного программера (Klen, кажется), который решился на подвиг создания Ассемблера AVR.
Скажете, а нафик это надо? А я скажу, а нафик вы тут все тогда нужны, если ОНИ завсегда могут всё сделать лучше, понятнее и правильнее (по-английски)?

У нас в промышленности всё это выглядит очень показательно. «Умерли» все те школы, которые могли бы что-то сделать наподобие ПЛК Siemens. Вместо этого сейчас учат как выбирать нужный ПЛК и программированию на английском, конечно, как без этого. В результате недообученные автоматчики пытаются ладить с таким кодом, управляющих целыми цехами (работал в таком цехе по горячему прокату, видел кухню изнутри).

Я вот, по-честному, никак не могу понять людей, которые пишут код для русских людей, общаются на 99% среди русских инженеров, у них пользователи — русско-говорящие… а комменты к коду на английском. Ещё пытаются что-то там доказывать про удобство английского, т.к. с ним там что-то кратко записывается :D (это особо юморно после чтения «Совершенный код», Макконнелла, где он прямо рекомендует писать существительные и глаголы целыми словами). Я при этом обычно демонстрирую простой, но очень наглядный пример с перестановкой букв, чтобы пояснить — при беглом чтении кода английский всегда будет проигрывать, это касается и комментов. Т.е. английский текст затрудняет образное (одним целым) восприятие.
0
1. Какой размер у спецификации C++? И каким количеством способов можно сделать одно и то же? Вспоминается картинка по поводу того как выучить с++ за 21 день:

2. C#, Java, Vala эти языки имеют более адекватную (на мой взгляд) объектную нотацию. (Вот кто бы Vala к контроллерам прикрутил, была бы бомба!)
3. Даже на больших компьютерах драйвера и работа с железом все равно пишется на Си с Ассемблером, чего уж говорить о маленьких контроллерах.
Хотя все же объективно я понимаю что нужно внедрять объектный Си, но уж больно не нравится мне С++ (субъективно).
4. По поводу П.С. абсолютно солидарен, к чему и призывал в комменте выше. Нужно развивать направление технической литературы. Да хотя бы спецификации с99 и т.п. перевести не хуже как в MSDN.

П.С. Представляю как лет через *ацать будем программировать лампочки на высокоуровневых языках =) Самый слабый контроллер будет 32 разрядным и минимум 1 мегабайтом флеша. Они все будут соединены в глобальную мировую сенсорную сеть, иметь свой строго вшитый IPv6 и каждым из них можно будет не только управлять с того конца света но и программировать его. Притом кто нибудь неофициально портирует Siri под эту сеть, так подходишь ты к лампочке, и спрашиваешь в чем смысл жизни? А она тебе отвечает…
0
По поводу картинки — она не в меньшей мере относится к любому языку программирования, включая и С.
А вопросу английский/русский я бы не стал придавать такое значение. Для индусов вон тоже аглицкий не родной, а программистов среди них столько…
0
(не забываем политическую географию — во многих странах, бывших колониях Англии, английский — государственный)
Англосфера

Лучше бы привести в пример китайцев, но и у них не всё так просто. У них есть некоторая соборность: www.hackchina.com/
Там много мануалов и большое количество именно на китайском, а не на английском.
0
Я где-то читал одного умного известного программера, что программером становятся за 10 лет.
Я начал с малого — использую классы в качестве обёрток для С кода. Мне же всё равно приходится ваять код на ПК для связи с МК. Кто тут его пишет на С? Либо Билдер, либо Дельфи, либо студия (VB.Net, C#, C++, C++/CLI). Сейчас всё объектное и ориентированное.
0
Если уж сравнивать, то нужно пройтись по всем критериям: от постановки ТЗ, до удобства тестирования.

Рекомендую всем почитать очень занимательную книжку (хоть немного устаревшую):
Как стать специалистом по встраиваемым системам. Пособие для тех, кто хочет заниматься интересным и хорошо оплачиваемым делом. Автор: Эдвардс Л.

Английский вариант, судя по амазону, вышел на несколько лет раньше и имел немного другое название :)
Так вот, там есть про этот холивар о выборе языка на стр. 100 раздел 3.7. Автор там говорит о Единственно Истинной Религии в выборе языка программирования.
Да и вообще, вторая часть книжки жизненна, хоть и на американский манер. У нас книжка вышла в 2009 г. У меня бумажный вариант, так что ссылки на электронный дать не могу. Она есть в Озоне.
0
А ссылку на бесплатный вариант нельзя было дать?
0
Вот чессно слово, я был дал, уже советовал одному товарищу, прошерстил рунет и не нашёл. Даже на bookfi.org. Не отсканили ещё. А мне самому немного лень, да и не спец я в этом деле.
0
Так опишите вкратце, небольшого топика бы хватило высказать основные концепции «Единственно Истинной Религии в выборе языка программирования». =)
Кстати какая вилка зарплат у специалистов по встраиваемым системам?
0
Вилка: от 15 тыс руб до 50 тыс руб. Это предложения от работодателей в г. Екатеринбурге. Т.е. работа «на дядю». Я проходил разные собеседования, где и узнавал эти расценки. Хорошие условия предлагали в Прософте и в InfiNet Wireless. Причём в последней даже 50 штук только по началу, но моих знаний и умений туда не хватило. Там нужно было быть достаточно линуксо-продвинутым и быть в теме различного рода кодирования в современных средствах связи. Кто меня этому научит :)
В Прософте поменьше и требования и зарплата, но есть всякие бонусы типа спортзала и т.д. Там дали список тестов и сказали: пройди :) В результате я получил аккаунт такого содержания:
certifications.ru/resume/175618
Честно говоря, не ожидал от этого тестового сервака такого уровня тестирования :) Но этих тестов не хватило, чтобы мной заинтересовались там. Жаль я когда-то в бытность свою студентом отказался от приглашения в эту фирму от знакомого профессора, который нам сигнальники преподавал.

Сам работал в разных мелких фирмах (avr, adsp), также на металлургическом заводе автоматчиком (ушёл оттуда после перевода на 12ч рабочую смену).

Зарплата «на дядю» в общем зависит от степени твоей полезности. Средний уровень — не больше 30 тыс. руб. Такой мой опыт. Я в некоторой степени по белому завидую DIHALT'у, сумевшему организовать своё дело по своему нутру. Но в книжке описаны все те проблемы, которые встречает «свободный художник» в отличие от обычного спеца в фирме. Прибыль больше, но и проблем тоже больше. Там целая глава посвящена описанию всех тех проблем, которые выпадут на голову и делаются всякие сравнения. Потому я и написал, что жизненно написана.

А что по выбору языка :) то не существует, конечно, Единственно Истинной Религии. Всё зависит от многих факторов, которые перечислены в книжке. Когда Вы приходите в фирму, то у вас даже выбора может не быть, а это будет пункт в вакансии. К примеру, в одной фирме ядро модуля было на 128 меге и код на EC++ под IAR и это ядро используется во всех модулях. Ты либо знаешь объектный Си, либо там не работаешь. А руководитель отдела программеров не является электронщиком, он из программистов. Ему просто легче писать так код. Вот и весь ваш выбор ;)

Так что холивары — они только в тырнетах, а на деле скажут писать на С++ — будешь писать. Но так не везде, кое-где даже про svn ничего не слышали и это всё в одном городе в разных фирмах.

Автор же книжки пишет, что все его проекты (это на 2006 г.) были на асме и Си, а писать их на С++ не видит большого смысла. С чем я не согласен, т.е. я не согласен писать под 128 мегу на асме :) и на Си тоже. Я пока в своём уме.
0
Приведу ещё один пример. Лет 6 назад (не знаю как сейчас) было большой проблемой отладка кода для ADSP сигнальника. Дело в том, что там код занимает больше места и заливать его туда долго было. Это тебе не USB как сейчас, а при отладке нужно быстро менять и смотреть в железе, менять и смотреть.

Умные люди вроде SM'а с телесисек (интересно он таки решился на получения вышки или нет) разработали для TI сигнальников специальные платы для быстрой работы с макетками. Но то TI, а то ADSP. А SM гуру :) такие не везде водятся.

Так вот, в одной небольшой фирме процесс написания кода для DSP выглядел так: пишется код для Дельфи, тестируется на специальных модулях самописных к нему, а потом ручками «переводится» на асм adsp, т.е. паскалевский код служил прототипом для асма сигнальника. Не хило да? А это всё потому, что главный спец там знал только паскаль из ЯВУ и уважал только асм на adsp. У него это всё было отлажено. Я уже тогда начал задумывать о писании кода на Си и С++ даже для DSP, не то что для простых контроллеров. Когда ты наизусть знаешь асм, то тебе не трудно понять как составить код на Си, чтобы было тоже самое, хотя это поначалу стоит больших усилий.

Так что очень многое зависит от человека и его предпочтений и занимаемой должности.
0
Да, высокоуровневое программирование под встраиваемые контроллеры на архетиктурах mips, cortex, всяческих DSP — это возможно, но нужно ли? Если уже такие среды как матлаб умеют генерить всяческие исходники даже под ПЛИСы. (Чувствую к этому в скором времени все и сведется)
Но низкий уровень мне кажется все равно никуда не денется, учится то как минимум на чем-то надо будет. Или математиков-теоретиков сразу за программинг сажать?
А как же схемотехника? Ведь хороший специалист по встраиваемым системам должен понимать что происходит еще и на физическом уровне, распространение сигнала, аналоговые цепи, черную магию и т.д. и т.п. Так что же, ему этого знать мало? Нужно еще и всяческий синтаксический сахар очередного высокоуровневого языка программирования, причем довольно сложного?
Напоминает шутку:
Что было бы, если бы при приеме на работу к водителям относились так же, как к программистам:

Вакансия: водитель.

Требования: профессиональные навыки управлении легковыми и грузовыми автомобилями, троллейбусами, трамваями, поездами метрополитена и фуникулера, экскаваторами и бульдозерами, спецмашинами на гусеничном ходу, боевыми машинами пехоты и современными легкими/средними танками, находящимися на вооружении стран СНГ и НАТО.

Навыки раллийского и экстремального вождения — обязательны, опыт управления болидами F1 — приветствуется. Знания и опыт ремонта поршневых и роторных двигателей, автоматических и ручных трансмиссий, систем зажигания, бортовых компьютеров, антиблокировочных систем, навигационных систем (GPS) и автомобильных аудиосистем ведущих производителей — обязательны. Опыт проведения кузовных и окрасочных работ приветствуется.

Претенденты должны иметь сертификаты Mercedes, BMW, General Motors, а также справки об участии в крупных международных ралли не более чем двухлетней давности. Зарплата 1500-2500 руб., определяется по результатам собеседования.

А по поводу выбора работы, ничего конкретного сказать не могу мало опыта. :)
Но искренне считаю, что главное, чтобы нравилось то чем ты занимаешься и стремиться стать действительно мастером своего дела =).
Правда технологи сейчас настолько быстро сменяют друг друга, что еще лет этак 10 назад все было сильно по другому. Но и развиваться тоже надо =) и не боятся быть в чем-то профаном.
0
На «низком» уровне не получится содержать семью, купить квартиру, машину, построить дом и посадить лес.
«Архитекторы» всегда получают больше. Если не закладывать в себя стремление к объёмному, целостному восприятию индустрии, то можно навсегда остаться на своём уровне. Многих это устраивает. Чтобы иметь большой динамический диапазон и кругозора, и опыта (как в анекдоте) нужно писать прототипы на разных языках под разные платформы. После этого появляются различные идеи как упростить жизнь простого программера.

Тот же пример с внедрением версии о номере прошивки на сайте microsin.ru:
IAR EW ARM: автоматическая генерация версии прошивки

Человек не только Си знает, то и немного VBScript. Я там в комментах переписал его вариант под JavaScript, но он не хороший. Я сейчас более правильную версию использую с одним заголовочником и inline-функциями. Теперь мне не нужно думать о версиях, т.к. я кидаю во все проекты несколько файлов скриптов и они сами генерят версии после каждого билда.
0
hexanaft, я тут подумал, что это была бы вполне реальная вакансия для геймера какой-нить будущей военной игрушки :D
Хотя, конечно, и для этого случая маловато было бы.
0
А как же схемотехника? Ведь хороший специалист по встраиваемым системам должен понимать что происходит еще и на физическом уровне, распространение сигнала, аналоговые цепи, черную магию и т.д. и т.п.
Для меня не понятно, почему бытует мнение, что программисты, которые пишут на языках высокого уровня под МК «оторваны» от платформы и схемотехники. На практике, даже если очень захочется абстрагироваться от платформы — не получится. Как можно что-то писать без понимания того как работает периферия, как периферийное устройство подключено к МК и т. д.? Да и копаться в ассемблерном листинге в процессе отладки и оптимизации приходиться ой как часто.
Аналогичная ситуация и на ПК. Я не знаю ни одного программиста, который пишет, например, оконные интерфейсы на MFC но при этом не знает «чистого» Win32API. Рано или поздно, в процессе отладки вы упретесь в Win32API и не понимая как это все работает на низком уровне – дальше вам делать нечего.
0
У меня был случай, когда такой программер долго искал операцию XOR в инструкциях avr, а когда не нашёл, то спросил как её реализовать? :)
Реальная история. Я подсказал заменить букву в мнемонике и поискать ещё раз.

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

Не всегда есть смысл досконально разбираться как, к примеру, работают процедуры записи и считывания за SD-карточку или тот же FAT16 или FAT32 как устроен. Можно целую диссертацию потом об этом писать :) Я уж про RTOS не говорю.

Если есть готовое решение, которое опробовано и работает, то почему бы его не использовать? Та же работа с а/ц LCD. Я видел тут две библиотеки на Си и асм, которые нафаршированы кодом. Вот такая халява постепенно расслабляет, т.к. сравнение временных диаграмм из документации и в реальности или просмотр пакетов протоколов достаточно нудное занятие.

А писать код без знания того как работает периферия можно :) Ведь для программиста главное — программная абстракция устройства, а не то как бегают там электроны. Иначе он не вылезет из этих дебрей никогда.

Особый случай — это ЦОС. Там да, нужно знать вдоль и поперёк. Там не то, что без знания периферии, там без знания математики к этой периферии (DDS, к примеру) не знаешь как подойти. Нервов попортит.

Если по-честному, то любому программеру на самом верхнем уровне нужно знать гораздо больше, чем уровнем ниже. Вот взять тот же C#. Говорят писать стало быстрее и всё такое прочее. А переписывать? Ведь написано горы кода для C++, он отлажен и работает, заново писать что-ли? Нет, сказали в Микрософте, мы вам создали новый язык: C++/CLI — с помощью него вы сможете использовать старый неуправляемый код в управляемом окружении…

Я пробовал писать… ты в голове не то что два языка держать должен, но и две платформы. Да, это работает, но нагрузка на мозг в n раз больше. Отладка управляемо-неуправляемого кода — особый разговор, который меня поначалу в тупик поставил (оказывается в студии есть специальная галка для этого).

Потому можно понять тех, кто привык к асму и си. Если и так всё работает, то нафик этот С++? Всё упирается во время.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.