Перейти к содержанию

Вопросы от начинающих по МК


Рекомендуемые сообщения

Смотря для каких целей использовать язык. Если нужна визуализация данных приходящих с контроллера, достаточно использовать какой-нибудь визуалбейсик, С++ и C# для этих целей как из пушки по воробьям, впрочем язык С для компьютера тоже не очень - уж больно там много ньюансов из-за которых можно пол дня искать неправильно поставленный символ.

Попробуй для компьютера изучить джаву или питон.

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

Не стоит завязываться на одинаковость языков и для ПК и для контроллера - запутаешься где и что следует применять а где не следует, всё-таки ньюансов и там и там слишком много.

Да и вообще завязываться на конкретный язык не стоит, нужно учиться программировать а не копировать конструкции языка из книжек а для этого надо развивать абстрактное мышление.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

Может глючную версию юзали из старых, 6-8 например?

Да, 8 кажется. Я даже вполне могу поверить, что оптимизировали скорость (хотя до обычного текстового редактора ее не дотянуть в принципе), но решили ли более важные проблемы эргономики?

Создание процедур. Не подприборов, разбросанных по файловой системе, а, скажем, математических или HAL. Во многих ЯП (хотя бы Си, Паскаль, Бейсик, даже Ассемблер) при необходимости можно просто поменять заголовочный файл и не разыскивать всю сотню мест, где идет обращение к какому-то интерфейсу. Особенно если в соседней программе надо оставить как есть. Туда же рекурсия, хотя не уверен, что она укладывается в философию labview.

Загромождение экрана неиспользуемыми линиями данных. Переменные в обычных ЯП появляются в коде только при использовании.

Изменение параметров компонентов из программы. Может исправили, но в той версии что я видел, нельзя было очистить график (кроме как заполнив весь его объем его нулями), запретить изменение какого-нибудь движка или просто поменять ему текст.

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

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

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Нет там различия принципиальные в самом подходе к программированию, продиктованные разным количеством доступных ресурсов. Компьютеру ничего не стоит за несколько тактов перемножить два вещественных числа размером по 128 или 256 бит, а МК будет очень долго пыхтеть только над одной этой операцией и с меньшими числами, даже если у него есть аппаратный перемножитель. Иногда это критично, иногда это просто ставит крест над программой и приходится брать МК с DSP или гораздо шустрее камушек. А оценить это без досконального знания как работает контроллер по одному лишь тексту программы просто невозможно.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Это уже тонкости, которые будут очевидны после первых же опытов. Вы же не думаете, что человек, едва научившись писать helloworld побежит делать сверхбыстрые анализаторы спектра на ATtiny13 с часовым кварцем. Я же написал, что если захочет серьезно заняться контроллерами пусть учит ассемблер. Когда попробует там реализовать хотя бы деление 8-битных чисел и посчитает такты, трижды подумает, стоит ли это использовать. Ну а если захочет остаться на уровне сборки конструктора, остается ардуина.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

А без изучения ассемблера не понять как деление происходит и прочее?Не хотелось бы его изучать,так как на нем очень много приходится писать строк кода,что бы простые функции сделать.

Ссылка на комментарий
Поделиться на другие сайты

Освоить архитектуру наверное можно и без него. Хотя ограничения "эту команду надо выполнить не более чем через 4 такта от предыдущей" могут вызывать ступор и шаманство. Да и любые критичные ко времени выполнения места будут проблемой. Изучить не значит пользоваться постоянно. Помимо написания всей программы есть еще поиск багов в выхлопе дизассемблера, ассемблерные вставки и тому подобное.

P.S. Надо, надо составить список вопросов по подводным камням в контроллерах.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

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

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

Программирование оно не в количестве строк измеряется. Если у вас проблема только со скоростью набора - найдите клавиатурный тренажёр и через две недели будете строчить на клавиатуре быстрее скорости мысли, как машинистка 200-300 знаков в минуту.

Это ж так прикинуть, средненький проэктик минут за 10 набрать... а простой вроде "хелло ворлд" - секунд за 20(10 из которых будет открываться IDE...). Постойте... что-то тут не так в расчётах, не бывает же такого в реальности.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Ага, а еще оптимизировать моргание, дыхание и прочее. Тоже ведь куча времени впустую уходит.

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Всем привет! Вывожу в терминал по UARTу массив , стандартной функцией из даташита на Мегу16 , данные выводятся , но в одну строчку , скажем вывел массив из 8 чисел , сразу же за ним выводится другой , пробовал в конце массива выводить число 13 - конец строки , но все равно все выводится в одну строчку друг за дружкой , плюс еще это 13 , Как сделать вывод столбиком ?

Ссылка на комментарий
Поделиться на другие сайты

Обычно в терминалах переход на другую строку осуществляется парой кодов 0x0D 0x0A, но в настройках принимающего терминала можно сделать так чтобы он реагировал только на 0x0D и переводил строку.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

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

но скорее всего глюк на стороне контроллера. Потому как символ 13 вообще относится к неотображаемым (начертания не имеет) и увидеть его в терминале не получится. Покажите кусок кода формирования строки для посылки в терминал.

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Обычно в терминалах переход на другую строку осуществляется парой кодов 0x0D 0x0A, но в настройках принимающего терминала можно сделать так чтобы он реагировал только на 0x0D и переводил строку.

А не наоборот? Хотя терминалке как правило пофиг, вот вчера пользовался кодами 10 затем 13. Все нормуль.

Всем привет! Вывожу в терминал по UARTу массив , стандартной функцией из даташита на Мегу16 , данные выводятся , но в одну строчку , скажем вывел массив из 8 чисел , сразу же за ним выводится другой , пробовал в конце массива выводить число 13 - конец строки , но все равно все выводится в одну строчку друг за дружкой , плюс еще это 13 , Как сделать вывод столбиком ?

Как правило нужно использовать два кода: конец строки и перевод строки (10 и 13), как в пишущей машинке.

Впрочем у меня были случаи что терминальная программа упорно не хотела переводить строку. Может в настройках где можно наладить. Мне помогла смена программы.

Попадалассь прога (не помню название которая только по символу 13 переводила и начинала новую строку)

Еще в нормальной терминалке можно символами бэкспэйс баловаться для затирки значений, типа проогрессбар импровизированный или отображение процентов выполнения (толи 8 толи 7, точно код непомню нужно таблицу ANSII смотреть)

Изменено пользователем Microchip

Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда)

Ссылка на комментарий
Поделиться на другие сайты

Попробовал после 0D добавить 0A , ни чего не изменилось , просто к концу посылки еще и 0А добавилось

post-187724-0-88901300-1457936676_thumb.jpg

Вот так я его отправляю

void Send_UART(unsigned char c)//    Отправка байта
{
    while(!(UCSRA&(1<<UDRE)))    //    Устанавливается, когда регистр свободен
    {}
    UDR = c;
}
..............................................
           Send_UART(data[0]);
           Send_UART(data[1]);
           Send_UART(data[2]);
           Send_UART(data[3]);
           Send_UART(data[4]);
           Send_UART(data[5]);
           Send_UART(data[6]);
           Send_UART(data[7]);
           Send_UART(13);
           Send_UART(10);

Ссылка на комментарий
Поделиться на другие сайты

Естественно он никуда не потеряется, выключите шестнадцатиричное отображение (в нем видно все символы включая и "непечатные").

Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда)

Ссылка на комментарий
Поделиться на другие сайты

Так может коды не те. Отправте коды 49, 32, 50, 32, 51, 32, 52, 10, 13, 49, 50. Результат в студию в ANSII.

Что должна делать

data[0]

Изменено пользователем Microchip

Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда)

Ссылка на комментарий
Поделиться на другие сайты

а нафига в терминал слать хексы? :shok:

ЕМНИП есть sprinf, который умеет хекс в строку конвертить. Помнится чтото такое делал, сейчас гляну в архив кода

вот так выглядела функция вывода строчки хексов в консоль

void UART2_callback_echo (void)
{
char EchoBuffer[MP3_MAX_STRING * 5 + 1];

for (uint8_t i=0; i<MP3_MAX_STRING; i++)
{
sprintf(&EchoBuffer[i*5], "0x%02X", mp3_recv_buf[i]);
if (i>0) EchoBuffer[i*5-1] = ' ';
}
EchoBuffer[MP3_MAX_STRING * 5-1] = '\n';
EchoBuffer[MP3_MAX_STRING * 5] = '\000';
while (huart1.State == HAL_UART_STATE_BUSY_TX_RX) {}; UART_Send(EchoBuffer);
}

все что нужно из этой функции - одна строчка перевода хекса в строку

sprintf(&EchoBuffer[i*5], "0x%02X", mp3_recv_buf);

ессно под каждый символ в строке вывода выделяется 5 знакомест - 0х + 2 символа + пробел

строчки

EchoBuffer[MP3_MAX_STRING * 5-1] = '\n';

EchoBuffer[MP3_MAX_STRING * 5] = '\000';

нужны для корректной обработки строковыми функциями и терминалом в дальнейшем

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Не не так, терминал может отображать либо текстом, либо кодами: бинарными или шестнадцатиричными. Гонится в любом случае в двооичном виде.

Кстати посмотрел повнимательней на скриншот: Коды 20, 69 и т.д. - это непечатные символы. Шлется в всякая абракадабра, она же и отображается.

Хотя второй символ должен быть "E". но видимо случайно.

Вот таблица ANSIII кодов.

Из нее видно что буквы начинаются с 65 - го (в hex 41).

Автор вопроса, а вы что хотите написать вообще?

-----------

+

Так попробуйте

Send_UART(48);
Send_UART(49);
Send_UART(50);
Send_UART(51);
Send_UART(52);
Send_UART(53);
Send_UART(54);
Send_UART(55);
Send_UART(10);
Send_UART(13);
Send_UART(56);

Изменено пользователем Microchip

Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда)

Ссылка на комментарий
Поделиться на другие сайты

data[] это массив на 8 байт , по одному байту я и вывожу UDR = data[0] .... UDR =data[7] Коды те , это данные принятые приемником в массив data[]

Автор вопроса, а вы что хотите написать вообще?

Хочу вывод 8 байт в hex , не в одну строчку , а по строкам - в одной строке 8 байт , затем в другой строке 8 байт .

Это скрин вывода кода , что просили

post-187724-0-59927500-1457942521_thumb.jpg

Изменено пользователем DmitryS
Ссылка на комментарий
Поделиться на другие сайты

Сколько байт, в hex-режиме, показывать в строке, решает сам терминал, а не данные, которые в него идут. Если показывать в ASCII, то 0D и 0A переведут на следующую строку, т.к. для строки - это символы перевода.

Ссылка на комментарий
Поделиться на другие сайты

Т.е. есть например есть однобайтное число: bin 10101011 = dec 10101011 = hex AB. И нужно чтобы отобразилось на экране "AB"? Обратите внимание на пост mail_robot.

Вам в этом случае надо процедуру конвертации, которая бы при получении числа 171 выводила бы два числа соответствующих кодам символов "A" "B" (97 и 98 соответственно). Т.е. конвертировала в hex.

Изменено пользователем Microchip

Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда)

Ссылка на комментарий
Поделиться на другие сайты

Я бы сказал не понятны что представляют сами исходные данные.

...Хочу вывод 8 байт в hex , не в одну строчку , а по строкам - в одной строке 8 байт , затем в другой строке 8 байт .....

Сколько байт, в hex-режиме, показывать в строке, решает сам терминал, а не данные, которые в него идут. Если показывать в ASCII, то 0D и 0A переведут на следующую строку, т.к. для строки - это символы перевода.

Конвертация исходных байтов в hex, каждые 8 значений вставлять для терминала коды 10 и 13. Отображение в терминале указать в ANSII.

Изменено пользователем Microchip

Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда)

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...