Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
1 / 1 / 0
Регистрация: 19.10.2018
Сообщений: 77

Проверти код, чем его можно улучшить?

01.10.2019, 11:50. Показов 2772. Ответов 25

Студворк — интернет-сервис помощи студентам
Всем привет, кому не лень, проверьте, пожалуйся код, нужна здоровая критика. Я начинающий, поэтому нужны мнения специалистов.

Спасибо.

Код представлен в виде драйвера GPIO на C++.
Вложения
Тип файла: zip gpio.zip (2.0 Кб, 13 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2019, 11:50
Ответы с готовыми решениями:

Посмотрите на код, как его можно улучшить
Мне был дан метод Ньютона X^3+X^2+1 = 0 на интервале а это код для его решения в C++ #define _USE_MATH_DEFINES #include...

Чем можно улучшить компьютер?
Процесор DualCore Intel Core i5-650, 3333 MHz (25 x 133) Системна плата Asus P7H55-M/USB3 Видеокарта NVIDIA...

Чем можно улучшить прогу!Дополните)
#include <iostream> using namespace std; enum {researsher,laborer,secratary,manager,accountant,executive}; class employe { ...

25
1 / 1 / 0
Регистрация: 19.10.2018
Сообщений: 77
02.10.2019, 15:41  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от _SayHello Посмотреть сообщение
Читаемость кода тоже не ахти
И всё же, что бы я мог сделать лучше, Вы не могли бы уточнить?)
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
02.10.2019, 15:53
Drakonoff,
Цитата Сообщение от Drakonoff Посмотреть сообщение
И всё же, что бы я мог сделать лучше, Вы не могли бы уточнить?)
Не знаю, если уж используете С++ и ООП, то делайте это в духе ООП.

Для этого колхоза давно был придуман enum:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    // Значения ножек портов ввода/вывода, используется для расчета положения установки значений
    // на соответсвующие выводы в регистрах настройки портов.
    const uint32_t pin0 = 0, pin1 = 1, pin2 = 2, pin3 = 3, pin4 = 4,
                   pin5 = 5, pin6 = 6, pin7 = 7, pin8 = 8, pin9 = 9,
                   pin10 = 10, pin11 = 11, pin12 = 12,pin13 = 13,
                   pin14 = 14, pin15 = 15;
    //Mode
    const uint32_t input = 0, output = 1, alt = 2, analog = 3;
    //Type
    const uint32_t pushPull = 0, openDrain = 1;
    //Speed
    const uint32_t lowSpeed = 0, mediumSpeed = 1,
                   highSpeed = 2, veryHighSpeed = 3;
    //Pull
    const uint32_t pullNon = 0, pullDown = 1, pullUp = 2;
    //Alt
    const uint32_t alt0 = 0, alt1 = 1, alt2 = 2 ,alt3 = 3, alt4 = 4,
                   alt5 = 5, alt6 = 6, alt7 = 7, alt8 = 8, alt9 = 9,
                   alt10 = 10, alt11 = 11, alt12 = 12, alt13 = 13,
                   alt14 = 14, alt15 = 15;
Вот это хозяйство должно быть явно приватным членом класса gpio:
C
1
2
3
4
5
6
7
8
9
10
    typedef struct
    {
        uint32_t id;
        uint32_t pin;
        uint32_t mode;
        uint32_t type;
        uint32_t speed;
        uint32_t pull;
        uint32_t alt;
    }gpioHandler;
Вместо этой штуки можно использовать статические члены класса
C
1
2
3
4
5
6
7
8
9
10
11
12
    typedef struct
    {
        status aGpioDevices;
        status bGpioDevices;
        status cGpioDevices;
        status dGpioDevices;
        status eGpioDevices;
        status fGpioDevices;
        status gGpioDevices;
        status hGpioDevices;
        status iGpioDevices;
    } gpioInternal;
Добавлено через 8 минут
Сделайте нормальные конструкторы
0
1 / 1 / 0
Регистрация: 19.10.2018
Сообщений: 77
02.10.2019, 15:58  [ТС]
Цитата Сообщение от _SayHello Посмотреть сообщение
Не знаю, если уж используете С++ и ООП, то делайте это в духе ООП.
Спасибо буду исправлять)
0
 Аватар для _SayHello
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
02.10.2019, 15:58
Сделайте удобный класс Pin, сделайте класс Port содержащий массив пинов.
Вот эта проверка ниочем - порт может не содержать и 15 пинов.
C++
1
2
3
4
    if(!(release->id) || (release->pin > GpioSpace::pin15)) {
 
        return StatusSpace::error;
    }
0
 Аватар для COKPOWEHEU
4148 / 2726 / 433
Регистрация: 09.09.2017
Сообщений: 12,080
02.10.2019, 16:14
Цитата Сообщение от _SayHello Посмотреть сообщение
дисплейчик 2004 обычный LCD надо было запустить по 8-ми битной шине, но шина была из Серии D0-D1 GPIOA, D2-D6 - GPIOB, D7 - GPIOD, управляющие пины вообще как попало.
Так его же обычно по 4-проводной запускают, как раз D2-D6 на данные, а управляющие линии это не шина, их можно куда угодно. Я давным-давно для AVR писал библиотеку именно с такой функциональностью: D0-D3 на любых последовательных портах, RS и E вообще на любых, обратная связь не использовалась.
Цитата Сообщение от Drakonoff Посмотреть сообщение
И всё же, что бы я мог сделать лучше, Вы не могли бы уточнить?)
А что, мало рекомендаций дали? Просто используйте свой вариант на практике при решении других задач. Для инструмента нет лучшей проверки, чем практическое использование.
В принципе, можете оформить справку по использованию и выложить на тест сюда. Пока что я, например, не слишком понимаю как вашей абстракцией пользоваться.
0
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,876
02.10.2019, 20:48
Цитата Сообщение от _SayHello Посмотреть сообщение
Сделайте удобный класс Pin, сделайте класс Port содержащий массив пинов.
когда то и я этим баловался
Классы при програмировании STM32
потом желание прошло, полноценные плюсы на микроконтроллер не вставишь, а вот проблем с тем же искажением имен получить легко
ушел на чистый Си
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.10.2019, 20:48

Укажите на ошибки,чем можно улучшить
Здравствуйте, собрал ПК для игр,бюджет не более 40к https://pcpartpicker.com/list/3RtM3t

Чем можно дополнить код? Добавление файла в автозапуск и его перенос
private void Form1_Load(object sender, EventArgs e) { string folderPath =...

добавить узел по индексу в листе? и если можно то можете подсказать где можно улучшить код или исправить
void structure::functions::Redact(std::list<structure::car1>& list) { system("cls"); std::list<structure::car1>::iterator it;...

Как добавить структуру по индексу в листе? и если можно то можете подсказать где можно улучшить код или исправить
Void structure::functions::Redact(std::list& list) { system("cls"); std::list::iterator it1,it2; it1 = it2 = list.begin(); short...

Есть файл с расширением .pm (модуль перла?), чем его открыть и можно ли в нем менять код?
Собственно приятель спрашивает как открыть этот файл в удобочитаемом виде и отредактировать некоторые строки? Говорит что открывает его,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru