|
|
  |
Embedded C++. |
|
|
|
May 23 2016, 10:26
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(demiurg_spb @ May 23 2016, 16:08)  Есть хорошие бесплатные курсы по C++ на https://www.coursera.org/Лично проходил. Понравилось, что обучают последним версиям языка и очень много дают шаблонного программирования и использования stl. Курс назывался C++ для Си программистов. спасибо. посмотрю. Цитата(AlexandrY @ May 23 2016, 16:20)  Ну так переименуйте файлы .c в .cpp и делов-то. Вон даже Mentor в своей операционке Nucleus Plus так делать не стесняется. И в Symbian так наверняка было сделано. а если проверят? а там ни класов ни строковых типов.
|
|
|
|
|
May 23 2016, 10:39
|

Местный
  
Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502

|
Цитата(AlexandrY @ May 23 2016, 11:20)  Ну так переименуйте файлы .c в .cpp и делов-то. Вон даже Mentor в своей операционке Nucleus Plus так делать не стесняется. И в Symbian так наверняка было сделано. Кстати, могут возникнуть некоторые забавные глюки от такого переименования.. Может потребоваться тонкая доводка исходников молотком и напильником  Ну, например, если в С-файле была использована переменная с именем, которое является зарезервированным в С++, ("new", например). Опять же, name mangling появится, что-то там было про разное отношение к one definition rule.
|
|
|
|
|
May 23 2016, 11:44
|
Местный
  
Группа: Участник
Сообщений: 202
Регистрация: 10-04-05
Из: Санкт-Петербург
Пользователь №: 4 011

|
Цитата(AlexandrY @ May 23 2016, 15:06)  Строковые типы? В embedded? На Cortex-M4 с сотней килобайт RAM-а на борту? Это очень самоуверенно я вам скажу. Если имеется ввиду std::string, то да, лучше не использовать. Но со строками как-то работать надо, поэтому колхозим свой велосипед: Код #pragma once
#include <cstring> #include <string> #include <algorithm> #include <stdio.h> #include <string.h> #include <stdlib.h>
namespace mylib{ template <size_t S> struct String { String() { clear(); } String(const char * str) { clear(); copy(str); } size_t size() const { return S; } // количество символов в буфере, исключая терминирующий \0 size_t occupied() const { return std::char_traits<char>::length(buf); } void clear() { std::fill(buf, buf + S, 0); } bool contains(const char * str) const { return std::strstr(buf, str) != NULL; } String<S> & operator=(const char * str) { copy(str); return *this; } char buf[S]; private: // копируем по указателю str символов не более (размер нашей строки - 1). // если копируемая строка меньше (размер нашей строки - 1), остаток добивается \0 void copy(const char * str) { size_t size = std::min(S - 1, std::char_traits<char>::length(str)); std::char_traits<char>::copy(buf, str, size); } };
} Класс добивается своими методами по потребностям. Можно полностью содрать интерфейс с std::string. Если встречу хорошо написанный класс строки, с удовольствием выкину свою поделку
|
|
|
|
|
May 23 2016, 12:21
|
Местный
  
Группа: Участник
Сообщений: 202
Регистрация: 10-04-05
Из: Санкт-Петербург
Пользователь №: 4 011

|
Цитата(Jenya7 @ May 23 2016, 15:56)  Вы как понимающий знаете что и где колхозить. а что делать начинающему? Учиться. Нужны материалы? Просто С++ - любые 3 хорошие книги (читать в фоне). Со спецификой embedded - мне очень понравилась эта книга https://vk.com/wall-112797241_4Быстрый старт. 1. Начните использовать ссылки. 2. Начните использовать С++ приведения типов reinterpret_cast, static_cast, const_cast. Запретите себе приведение типов в стиле C. 3. Используйте namespace. 4. Используйте перегрузку функций (если надо конечно). 3. Пробуйте проектировать простые классы. Напишите класс светодиода, пусть плохенький (для начала). Это уже объектно-ориентированный анализ и проектирование, есть отдельные книги. Спрашивайте здесь, как написать класс под ту или иную задачу.
|
|
|
|
|
May 23 2016, 12:47
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(Slash @ May 23 2016, 18:21)  Учиться. Нужны материалы? Просто С++ - любые 3 хорошие книги (читать в фоне). Со спецификой embedded - мне очень понравилась эта книга https://vk.com/wall-112797241_4Быстрый старт. 1. Начните использовать ссылки. 2. Начните использовать С++ приведения типов reinterpret_cast, static_cast, const_cast. Запретите себе приведение типов в стиле C. 3. Используйте namespace. 4. Используйте перегрузку функций (если надо конечно). 3. Пробуйте проектировать простые классы. Напишите класс светодиода, пусть плохенький (для начала). Это уже объектно-ориентированный анализ и проектирование, есть отдельные книги. Спрашивайте здесь, как написать класс под ту или иную задачу. спасибо.
|
|
|
|
|
May 24 2016, 07:48
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (arhiv6 @ May 24 2016, 10:34)  Если другие фишки C++ при этом не использовать, то в производительности/ресурсах вроде не потеряете Существует множество других возможностей плюсов, которые не тянут за собой ни грамма производительности/ресурсов, а исходник (и, как следствие, его написание/сопровождение) упрощают. Но для этого надо хоть немного напрячься в изучении языка, а это горазно сложнее, чем размахивать флагом "плюсы - это раздутый код и тормоза". Но мы то знаем, что за этими заявлениями кроется опыт "настоящих программистов", пишущих на Паскале на любом языке.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|