реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3 >  
Reply to this topicStart new topic
> Embedded C++.
Jenya7
сообщение May 23 2016, 10:26
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 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 так наверняка было сделано.

а если проверят? а там ни класов ни строковых типов. sm.gif
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение May 23 2016, 10:39
Сообщение #17


Местный
***

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



Цитата(AlexandrY @ May 23 2016, 11:20) *
Ну так переименуйте файлы .c в .cpp и делов-то.
Вон даже Mentor в своей операционке Nucleus Plus так делать не стесняется.
И в Symbian так наверняка было сделано.


Кстати, могут возникнуть некоторые забавные глюки от такого переименования.. Может потребоваться тонкая доводка исходников молотком и напильником sm.gif
Ну, например, если в С-файле была использована переменная с именем, которое является зарезервированным в С++, ("new", например).
Опять же, name mangling появится, что-то там было про разное отношение к one definition rule.

Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 23 2016, 11:06
Сообщение #18


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Jenya7 @ May 23 2016, 13:26) *
а если проверят? а там ни класов ни строковых типов. sm.gif


Строковые типы? В embedded? На Cortex-M4 с сотней килобайт RAM-а на борту? Это очень самоуверенно я вам скажу.

Хотя если речь про Raspberry PI, то все нормально.
Но это чудо теперь и на C# программируется.
Я прямо сейчас для него на C# пишу сервер IoT.

Go to the top of the page
 
+Quote Post
Slash
сообщение May 23 2016, 11:44
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 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.
Если встречу хорошо написанный класс строки, с удовольствием выкину свою поделку sm.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 23 2016, 11:56
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Slash @ May 23 2016, 17:44) *
Если имеется ввиду std::string, то да, лучше не использовать. Но со строками как-то работать надо, поэтому колхозим свой велосипед:
Класс добивается своими методами по потребностям. Можно полностью содрать интерфейс с std::string.
Если встречу хорошо написанный класс строки, с удовольствием выкину свою поделку sm.gif

Вы как понимающий знаете что и где колхозить. а что делать начинающему?
Go to the top of the page
 
+Quote Post
Slash
сообщение May 23 2016, 12:21
Сообщение #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. Пробуйте проектировать простые классы. Напишите класс светодиода, пусть плохенький (для начала). Это уже объектно-ориентированный анализ и проектирование, есть отдельные книги.
Спрашивайте здесь, как написать класс под ту или иную задачу.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 23 2016, 12:47
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 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. Пробуйте проектировать простые классы. Напишите класс светодиода, пусть плохенький (для начала). Это уже объектно-ориентированный анализ и проектирование, есть отдельные книги.
Спрашивайте здесь, как написать класс под ту или иную задачу.

спасибо.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение May 23 2016, 17:53
Сообщение #23


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Цитата(Jenya7 @ May 23 2016, 02:01) *
которые по дикому желанию заказчика должны быть написаны на С++. что я могу поделать.

Жесть. Заказчик требует определенный язык пр-ия... и может отругать за то, что не он использован. smile3046.gif
Go to the top of the page
 
+Quote Post
Эдди
сообщение May 24 2016, 05:35
Сообщение #24


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



А чего не жабку или пхытон? Не, даже жабоскрипт! Если уж и быть извращенцем, так по полной!
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 24 2016, 06:13
Сообщение #25


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(jorikdima @ May 23 2016, 23:53) *
Жесть. Заказчик требует определенный язык пр-ия... и может отругать за то, что не он использован. smile3046.gif

что тут удивительного? в военных проектах (да и не только в военных. любой серьезный заказчик.) обычно определяют и язык програмирования и RTOS и среду тестирования и еще много чего. например был авиационный проект там вообще запретили микроконтроллеры. все писали на FPGA.

Сообщение отредактировал Jenya7 - May 24 2016, 06:14
Go to the top of the page
 
+Quote Post
Эдди
сообщение May 24 2016, 06:18
Сообщение #26


Знающий
****

Группа: Участник
Сообщений: 825
Регистрация: 16-04-15
Из: КЧР, Нижний Архыз
Пользователь №: 86 250



Цитата(Jenya7 @ May 24 2016, 09:13) *
что тут удивительного?

C++ и embedded — это промежуточный шаг к ардуйне! Хотя, ацефалия нонче в моде.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 24 2016, 07:25
Сообщение #27


Гуру
******

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



Да-да, еще каких-то 20 лет назад продвинутые ассемблерщики так же ругали Си. Некоторые до сих пор ругают. Не знаете плюсов, не умеете их применять в контроллерах - промолчите, не позорьтесь, не мешайте развиваться другим.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
arhiv6
сообщение May 24 2016, 07:34
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Если не для себя, а для заказчика, то да, проще всего сделать как советовал AlexandrY - переименовать c в cpp и переработать код, добавив классы. Вроде такой стиль программирования так и называют - "си с классами". Если другие фишки C++ при этом не использовать, то в производительности/ресурсах вроде не потеряете, а некоторые удобства (например, инкапсуляция) добавятся.

Сообщение отредактировал arhiv6 - May 24 2016, 07:39


--------------------
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 24 2016, 07:39
Сообщение #29


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



"С с классами" - так сначала назывался С++. Стоит только переименовать с в срр, как сразу в голову полезут идеи, как этими ++ попользоваться. Сначала немного, дальше больше.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 24 2016, 07:48
Сообщение #30


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 08:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01524 секунд с 7
ELECTRONIX ©2004-2016