Скомпилированный скетч и размер текстового файла

Хорошо, это моя первая программа, написанная с помощью утилиты Tinkercad. Я сохранил программу в виде текстового файла, размер которого составляет около 22 КБ.

Мой простой вопрос: при загрузке / компиляции на фактическую плату размер увеличивается или уменьшается? Я планирую использовать Nano (32K). Если он сожмется или останется примерно таким же, все будет в порядке. Однако, если он "раздувается" из-за дополнительного кода C...

** Кто-то, кто привык работать с подпрограммами, массивами и переменными, обнаружил, что все должно быть в одном цикле, и только условный оператор прерывает поток — по крайней мере, в TinkerCAD. И когда вы хотите управлять 8 светодиодными выходами, вам нужно включать и выключать каждый из них через цифровую линию записи. Например, четыре строки вывода ниже:

11001100
01100110
00110011
10011001

... требуется 32 команды цифровой записи !! (И хотя приведенное выше составляет 4 строки, в окончательном коде около 150 похожих строк, отсюда и размер)

Способ, которым я написал это, используя вышеуказанную утилиту, был примерно таким:

for(counter=0; counter<4; counter){
if (counter==0){
    digitalWrite(2, HIGH);
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, HIGH);
    digitalWrite(7, HIGH);
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
  }
if (counter==1){
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
    digitalWrite(4, HIGH);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(8, HIGH);
    digitalWrite(9, LOW);
  }
//etc
}

, 👍0

Обсуждение

Хотя я не знаю, работает ли это в Tinkercad, но вы можете использовать для этого прямые манипуляции с портами. Затем вы можете написать полный порт (8 выходов) в одном операторе (на самом деле 1 атомарная операция). Вы пробовали это?, @chrisl

и почему вы используете TinkerCAD, если вы можете программировать? используйте Eclipse с плагином Sloeber. или хотя бы Arduino IDE, @Juraj

"прямой порт" ... "1 атомарная операция". Извините, я программировал всего четыре дня, так что это вылетело из головы! ЗАЧЕМ использовать Tinkercad, если вы умеете программировать? Ну, я знаю PERL, HTML и Javascript ... но Arduino для меня - это новая игра., @Cristofayre


2 ответа


3

Размер текстового файла и размер скомпилированного кода невозможно связать. Скомпилированный размер зависит только от из чего состоит ваш код, а не от размера.

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

Например:

Sketch uses 3730 bytes (13%) of program storage space. Maximum is 28672 bytes.
Global variables use 157 bytes (6%) of dynamic memory, leaving 2403 bytes for local variables. Maximum is 2560 bytes.
,

Вы можете скомпилировать код, даже не имея платы. Таким образом, вы даже можете сравнить разные платы перед покупкой. (Хотя между nano и uno не должно быть такой разницы), @Gerben

Спасибо за отзыв Маженко. Вы как бы сказали то, что, как я думал, может случиться, что есть определенные «служебные» коды, которые также должны попасть в пространство для хранения, чтобы иметь возможность «читать» текстовый (или ino?) файл. Единственный способ узнать наверняка - запустить его через IDE, но не сохранять на доске (если это вообще возможно: все еще очень нуб!), @Cristofayre

@Cristofayre В IDE вы можете скомпилировать код (называемый «проверкой» в IDE IIRC), который создает файл, который можно установить на доску или позже. Или вы можете скомпилировать *и* загрузить за один раз. Вы можете просто нажать кнопку компиляции (или проверить?), и она преобразует код C в машинный язык для работы на плате (на плате не работает C) и сообщит вам, насколько велик результат., @Majenko

Спасибо Маженко. Я посмотрю на это. Я также только что записался на онлайн-курс (БЕСПЛАТНЫЙ), так что посмотрим, чему я могу научиться из их кодирования. (Извините, я не могу «проголосовать» за ваш ответ на данном этапе), @Cristofayre


0

Счетчик где-то увеличивается? Как написано, всегда будет 0, да?

Я бы использовал

for(counter=0; counter<4; counter = counter +1){ // или counter++

Вы можете хранить свои 8 бит в массиве

byte ledArray[] = {
0b11001100, // или шестнадцатеричный формат, 0xCC
0b01100110, // 0x66
0b00110011, // 0x33
0b10011001, // 0x99
};

Затем используйте вызов функции (подпрограммы с другим именем) для управления выходными данными.

,

Извинения. Вы правы, я пропустил "счетчик ++" в конце цикла. Я думаю, что то, что вы предлагаете для «byte ledArray», входит в область ручного кодирования (что, теперь я знаю, это можно сделать, может выглядеть дальше). Но Tinkercad использует кодовые блоки, поэтому код, который они создают, является «базовым». (И если вы переключитесь на ручное редактирование кода... вы потеряете все предыдущие настроенные блоки!), @Cristofayre

Что мне нравится в TinkerCad, так это то, что он показывает печатную плату Arduino, и вы можете добавить к ней виртуальные резисторы, светодиоды и т. д., а затем вы получите визуальную индикацию того, что будут делать блоки кода. (Но даже для того, чтобы добавить библиотеку, вы должны редактировать ее вручную; никаких блоков, чтобы помочь. Это будет нормально, как только я начну больше знать, что я делаю!), @Cristofayre

Не уверен, как правильно это сделать на форуме, но я «придумал» возможное решение. Поскольку это моя первая попытка ручного кодирования - прыжки вглубь - я разместил его как еще один вопрос и задался вопросом, могут ли более знающие дать ему еще раз... тем более, что он включает в себя массивы, двоичные "строки" , и чтение отдельных битов !, @Cristofayre