Что значат аргументы в функции

Тема в разделе "Arduino & Shields", создана пользователем ИгорьК, 23 сен 2015.

  1. ИгорьК

    ИгорьК Гуру

    Не понял, что значат аргументы в функции:
    Код (C++):
    int main(int argc, char** argv)
    Кто сможет объяснить?
     
  2. Unixon

    Unixon Оракул Модератор

    На ПК операционка передает программе параметры при запуске как массив строк.

    argc - количество аргументов
    argv - массив строк с текстом аргументов

    На микроконтроллере эти параметры смысла не имеют.
     
    ИгорьК нравится это.
  3. ИгорьК

    ИгорьК Гуру

    Понятно, что это не МК. Это Raspberry Pi - Линукс. Что почитать на тему? Надо передавать некую, заранее известную информацию в UART. В режиме командной строки работает: ./uartnoolite /dev/ttyAMA0
    Задача - спрятать информацию о порте в сам файл: /dev/ttyAMA0
     
  4. geher

    geher Гуру

    Это стандартная точка входа, используемая в C/C++
    argc - количество параметров, поступающих из командной строки. Обычно не меньше 1, поскольку нулевым параметром идет имя исполняемого файла (может быть с путем к нему).
    argv - массив указателей на параметры командной строки. Параметры разделяются пробелами. Если часть параметров взята в кавычки, то она трактуется как один параметр.
    Возвращаемое значение - код возврата, который получит программа, вызвавшая данную программу, после завершения вызванной программы.

    Например.
    Исполняемый файл с откомпилированной программой называется program и находится в /home/user/folder
    Запускаем программу из консоли следующим вызовом
    /home/user/folder/program file1.ext file2.ext "f i l e.ext"
    В этом случае argc будет 4, argv[0] будет указывать на "/home/user/folder/program", argv[1] на "file1.ext", argv[2] на "file2.ext", argv[3] на "f i l e.ext"

    На МК применяется форма данной функции без аргументов:
    int main (void)
     
    ИгорьК нравится это.
  5. ИгорьК

    ИгорьК Гуру

    Друзья! Ну не халявщик я! Мне стыдно! Просто ткните носом что почитать.
     
    Последнее редактирование: 24 сен 2015
  6. AlexU

    AlexU Гуру

    Это не совсем файл. Дело в том, что в Linux каталог /dev -- это каталог "драйверов" (dev == devices - устройства). Попробую объяснить: для любого устройства (диск, монитор, мышь, клавиатура, принтер, сканер и т.п.) в ОС Linux создается "файл", что бы можно было с этим устройством обмениваться данными. Например, драйвер видеокарты Nvidia -- это утройство /dev/video0, все что будет записано в "файл" /dev/video0 опеределённым образом отразится на мониторе (только в этот "файл" нужно писать правильные данные, иначе выведете из строя видеокарту).
     
  7. AlexU

    AlexU Гуру

    Каким компилятором пользуетесь?
     
  8. ИгорьК

    ИгорьК Гуру

    Знать бы... Передо мной Малина и С++. И состояние... как будто первый раз в руках Ардуино держу.
    Все что на С написано - понятно. Но как это взаимодействует с GPIO Малины - темный лес.
     
  9. AlexU

    AlexU Гуру

    Есть библиотека: http://wiringpi.com/
    Если Вы пользуетесь OC Linux не только для "Малинки", то Eclipse (можно другую IDE) + GCC("ARM CrossCompilation") + WiringPI = исполняемый файл для "Малинки", который может быть записан на флешку (ту которая в Малинку вставляется) и в последствии исполнен.
    В случае с IDE Eclipse, то с дополнением TCF -- Eclipse сам позаботится о переносе исполняемого файла в память "Малинки" (на флешку) и его запуске.
     
    ИгорьК нравится это.
  10. ИгорьК

    ИгорьК Гуру

    хм... буду копаться :)