I am beginning to work with micro controllers and programming them using C language.
На практике это важное соображение. Я предполагаю, что ваш микроконтроллер — это что-то вроде Arduino(или, возможно, Raspberry Pi ).
В общем, нужен какой-нибудь перекрестный -компилятор . Затем вы выполните перекрестную -компиляцию в своей настольной системе (, например. немного Linux, который очень удобен для разработчиков; но вы можете найти перекрестные -компиляторы, размещенные на Windows или MacOSX, для Arduinos ), ваш исходный код в исполняемый файл, предназначенный для вашего микроконтроллера, а затем передать двоичный исполняемый файл на ваш микроконтроллер.
C — сложный язык программирования.
Во многих случаях вы можете скомпилировать свой код прямо на рабочем столе. (Не забудьте включить все предупреждения и отладочную информацию, например.
gcc -Wall -Wextra -g
с GCC ), протестируйте большую часть его на своем рабочем столе, а затем адаптируйте его и портируйте для своего Arduino. Отладка некоторого кода на ноутбуке или настольном компьютере намного проще, чем отладка на Arduino.Позже вы перекрестно -скомпилируете тот же исходный код для вашего микроконтроллера.
Вариантов больше. Чтобы избежать экранирования сложных выражений, поместите их в файлы. Например, поместите регулярное выражение и строки в набор файлов (r *,l *)
shell> cat files/replace/r1
^<!-- <param name="core-db-dsn" value="pgsql:(.*)$
shell> cat files/replace/l1
<param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname={{ DB_Info }} user={{ DB_Info }} password='{{ DB_Pass }}' options='-c client_min_messages=NOTICE'" />
Тогда приведенная ниже задача выполняет работу
- replace:
path: switch.conf.xml
regexp: "{{ lookup('file', 'files/replace/r1') }}"
replace: "{{ lookup('template', 'files/replace/l1') }}"
vars:
DB_Info: freeswitch2
DB_Pass: passwd
Если файлов больше, запустите задачу в цикле. Например
- replace:
path: switch.conf.xml
regexp: "{{ lookup('file', 'files/replace/r' ~ ansible_loop.index ) }}"
replace: "{{ lookup('template', 'files/replace/l' ~ ansible_loop.index) }}"
loop: "{{ lookup('fileglob', 'files/replace/r*', wantlist=True) }}"
loop_control:
extended: true
vars:
DB_Info: freeswitch2
DB_Pass: passwd
Убедитесь, что 'glob' соответствует только тому, что вам нужно. Удалите все временные или резервные файлы. Цикл ожидает набор из (r *,l *)файлов с непрерывным индексом, начинающимся с 1.
Чтобы избежать обслуживания слишком большого количества (r *,l *)файлов, поместите все регулярные выражения и строки в отдельные файлы и зациклите строки файлов. Например
- replace:
path: switch.conf.xml
regexp: "{{ item.0 }}"
replace: "{{ item.1 }}"
with_together:
- "{{ lookup('file', 'files/replace/r-all').splitlines() }}"
- "{{ lookup('template', 'files/replace/l-all').splitlines() }}"
loop_control:
label: "{{ item.0 }}"
vars:
DB_Info: freeswitch2
DB_Pass: passwd