В этом уроке напишем первую программу, научимся считывать значение цифровых входов и устанавливать состояние выходов. Реализуем управление такими простыми элементами, как кнопка и светодиод на платформе Maixduino.
Что нужно знать
Существует 3 фреймворка для разработки приложений для процессора К210:
- Standalone SDK для Kendryte K210;
- Kendryte FreeRTOS SDK — Этот SDK предназначен для Kendryte K210, который содержит поддержку FreeRTOS;
- Arduino (на основе Standalone SDK).
Для работы с периферийными устройствами на Maixduino существует 3 основных компонента: GPIO, GPIOHS и FPIOA.
- GPIO (General Purpose Input Output / Интерфейс ввода/вывода общего назначения) — чип имеет 8 GPIO общего назначения.
- GPIOHS (General Purpose Input Output High Speed / Высокоскоростной интерфейс ввода/вывода общего назначения) – чип имеет 32 высокоскоростных GPIO. Похоже на обычный GPIO, но быстрее.
- FPIOA (Field Programmable I/O Array / Программируемый массив ввода/вывода) позволяет пользователю соотносить 256 внутренних функций с 48 физическими входами / выходами на чипе.
Из этого следует, что Maixduino более гибок, чем простой Arduino на базе микроконтроллеров AVR. Мы можем сопоставить любое устройство с любым физическим контактом (контактами), например, кнопки, светодиоды, устройства I2C и SPI, и т. д.
Создание нового проекта
- Открываем PlatformIO: Home и выбираем New Project, чтобы создать новый проект;
- Задаём название проекта в поле Name;
- В Boards ищем плату Sipeed MAIXDUINO;
- Выбираем Фреймворк Kendryte FreeRTOS SDK;
- В Location можно указать путь, где будет храниться проект, но можно оставить по умолчанию.
При создании первого проекта, все необходимые файлы и библиотеки будут загружены и установлены автоматически, и это может занять больше времени, чем обычно.
Настройка проекта
В папке src необходимо создать два файла: main.cpp и project_cfg.h. В первом файле мы напишем программу, а во втором мы определим макросы и настроим функции выводов.
В корневом каталоге есть файл platformio.ini — файл конфигурации проекта PlatformIO. По умолчанию PlatformIO автоматически определяет порт загрузки. Но Вы можете настроить собственный порт, используя параметр upload_port
. Список портов вы можете найти в Диспетчер Устройств или во вкладке Devices в PIO Home.
В platformio.ini вы также можете изменить скорость загрузки, используя параметр upload_speed
, порт монитора, параметр monitor_port
, и скорость монитора порта, параметр monitor_speed
. Порт загрузки и порт монитора должны совпадать.
Пример файла platformio.ini
; PlatformIO Project Configuration File ; ; Build options: build flags, source filter ; Upload options: custom upload port, speed and extra flags ; Library options: dependencies, extra library storages ; Advanced options: extra scripting ; ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html [env:sipeed-maixduino] platform = kendryte210 board = sipeed-maixduino framework = kendryte-freertos-sdk upload_port = COM3 upload_speed = 1500000 monitor_port = COM3 monitor_speed = 115200
Как работать с GPIO
Если мы хотим записывать или читать данные из GPIO, мы должны сначала его настроить. Как упоминалось выше, K210 имеет 48 контактов и 256 функций для них. Но поскольку на плате формфактора Arduino количество контактов ограничено, используются не все 48 контактов.
Сначала, чтобы определить, какие контакты и где они назначены, мы должны открыть схему платы — Maixduino-4.30(schematic).pdf. Тут нужно найти разъемы (Connector).
Все контакты разъема P3 (HEADER-1X6) подключены к ESP-32, поэтому его нельзя использовать с K210. Но разъемы P2 и P5 идут на K210, и их можно использовать в качестве контактов ввода-вывода общего назначения.
Настройка порта
Перед настройкой вывода на выход или на вход ему необходимо назначить одну функцию из 32 GPIOHS или 8 GPIO. Это можно сделать двумя способами:
- с использованием функции
int fpioa_set_function (int number, fpioa_function_t function)
; - с конфигурацией объекта
g_fpioa_cfg
.
Первый вариант можно использовать в небольших проектах с небольшим количеством конфигураций или в проектах, которые требуют изменения функции вывода во время работы программы (runtime).
Второй вариант более предпочтителен, поскольку за настройку всех выводов отвечает только один файл, таким образом проект становится более структурированным и читаемым.
В приведенных ниже примерах показано, как соотносить функцию GPIOHS0 на вывод под номером 3 (это вывод IO3 на разъеме P5). Обратите внимание, что перечисление выполняется относительно FUNC_GPIOHS0
. В дальнейшем будут использоваться только значения от 0 до 31. Поэтому желательно использовать макросы (#define
).
Пример 1:
fpioa_set_function(3, static_cast<fpioa_function_t>(FUNC_GPIOHS0 + 0));
Пример 2:
#ifndef PROJECT_CFG_H #define PROJECT_CFG_H #include <pin_cfg.h> const fpioa_cfg_t g_fpioa_cfg = { /* Версия */ .version = PIN_CFG_VERSION, /* Число функций */ .functions_count = 1, /* Офисание функций */ .functions = { /* */ {3, static_cast<fpioa_function_t>(FUNC_GPIOHS0 + 0)}, }, }; #endif
После этого необходимо открыть устройство gpio0
с помощью функции io_open
.
/* Открываем GPIO0 устройство */ gpio = io_open("/dev/gpio0");
И наконец настраиваем режим работы вывода (пина) – на вход или выход.
/* Устанавливаем режим работы пина 0 на вход. */ gpio_set_drive_mode(gpio, 0, GPIO_DM_INPUT);
/* Устанавливаем режим работы пина 0 на выход. */ gpio_set_drive_mode(gpio, 0, GPIO_DM_OUTPUT);
/* Устанавливаем режим работы пина 0 на вход с подтягивающим резистором (pull-up resistor). */ gpio_set_drive_mode(gpio, 0, GPIO_DM_INPUT_PULL_UP);
/* Устанавливаем режим работы пина 0 на вход с стягивающим резистором (pull-down resistor). */ gpio_set_drive_mode(gpio, 0, GPIO_DM_INPUT_PULL_DOWN);
Примеры программ
Чтобы лучше понять, как всё это работает, приведу два примера программ. Комментарии также будут добавлены в код для более подробного описания.
Пример 1 — мигаем светодиод
В первом примере будем мигать светодиодом, подключенным к одному из выводов платы. В файле project_cfg.h настроим функцию вывода, используемый для мигания светодиода. В файле main.cpp настроим вывод на выход и создадим задачу blinkLedTask
, которая будет вызываться с интервалом 100 мс, и при каждом вызове светодиод будет менять свое состояние с ВКЛ на ВЫКЛ и наоборот.
Схема подключения
Светодиод подключается на 13-й контакт Maixduino/Arduino через резистор, ограничивающий ток.
Файл project_cfg.h
#ifndef PROJECT_CFG_H #define PROJECT_CFG_H #include <pin_cfg.h> /** * Номер внутреннего пина */ #define LED_IO (0) /** * Номер физического пина */ #define LED_PIN (3) const fpioa_cfg_t g_fpioa_cfg = { /* Версия */ .version = PIN_CFG_VERSION, /* Число функций */ .functions_count = 1, /* Офисание функций */ .functions = { /* */ {LED_PIN, static_cast<fpioa_function_t>(FUNC_GPIOHS0 + LED_IO)}, }, }; #endif
Файл main.cpp
#include "project_cfg.h" #include <FreeRTOS.h> #include <devices.h> #include <syslog.h> #include <task.h> /** * Указатель на устройство GPIO */ static handle_t gpio; /** * Текущее состояние светодиода */ static gpio_pin_value_t ledState; /** * Прототип задачи включения/выключения светодиода * * @param pvParameters Функции задач принимают параметр, имеющий тип указателя на void (т. е. void*). Значение, указанное в pvParameters, будет передано в задачу. */ static void blinkLedTask(void *pvParameters); /** * */ int main() { BaseType_t retCode; /* Открываем GPIO0 устройство */ gpio = io_open("/dev/gpio0"); /* Перехват ошибок в процессе разработки */ configASSERT(gpio); /* Устанавливаем режим работы LED_IO пина на выход. */ gpio_set_drive_mode(gpio, LED_IO, GPIO_DM_OUTPUT); /* Задаём начальное состояние светодиода (выключаем) */ ledState = GPIO_PV_LOW; /* Пишем состояние в пин */ gpio_set_pin_value(gpio, LED_IO, ledState); /* Создаём задачу с мигающим светодиодом */ retCode = xTaskCreateAtProcessor(1, &blinkLedTask, "Blink Led task", 512, nullptr, 3, nullptr); /* Проверяем, если задача была успешно создана */ if (retCode == pdPASS) { /* В случае успеха выводим информационное сообщение */ LOGI("MFRB", "Blink Led task is running"); } else { /* В случае неудачи выводим предупреждающее сообщение */ LOGW("MFRB", "Blink Led task start problems"); } for (;;) { } return 0; } static void blinkLedTask(void *pvParameters) { while (1) { /* Меняем состояние в 1/0 */ if (GPIO_PV_HIGH == ledState) { ledState = GPIO_PV_LOW; } else { ledState = GPIO_PV_HIGH; } /* Пишем новое состояние в пин */ gpio_set_pin_value(gpio, LED_IO, ledState); /* Помещаем задачу в состояние Blocked на фиксированное количество тиков прерываний. Находясь в состоянии Blocked, задача не использует процессорное время, поэтому процессор загружен только полезной работой. С помощью макроса pdMS_TO_TICKS мы конвертируем миллисекунды в тики */ vTaskDelay(pdMS_TO_TICKS(100)); } }
Пример 2 — кнопка и светодиод
Во втором примере помимо светодиода подключим еще и кнопку. Если кнопка не нажата, светодиод будет менять свое состояние (мигать) каждые 500 мс, а при нажатии — каждые 100 мс. Вывод, подключенный к кнопке, настроен на вход с подтягивающим резистором gpio_set_drive_mode(gpio, BTN_IO, GPIO_DM_INPUT_PULL_UP);
.
Схема подключения
Светодиод подключается на 13-й контакт Maixduino/Arduino через резистор, ограничивающий ток, а кнопка на 12-й контакт и GND.
Файл project_cfg.h
#ifndef PROJECT_CFG_H #define PROJECT_CFG_H #include <pin_cfg.h> /** * Номер внутреннего пина */ #define LED_IO (0) #define BTN_IO (1) /** * Номер физического пина */ #define LED_PIN (3) #define BTN_PIN (10) const fpioa_cfg_t g_fpioa_cfg = { /* Версия */ .version = PIN_CFG_VERSION, /* Число функций */ .functions_count = 2, /* Офисание функций */ .functions = { /* */ {LED_PIN, static_cast<fpioa_function_t>(FUNC_GPIOHS0 + LED_IO)}, {BTN_PIN, static_cast<fpioa_function_t>(FUNC_GPIOHS0 + BTN_IO)}, }, }; #endif
Файл main.cpp
#include "project_cfg.h" #include <FreeRTOS.h> #include <devices.h> #include <syslog.h> #include <task.h> /** * Указатель на устройство GPIO */ static handle_t gpio; /** * Текущее состояние светодиода */ static gpio_pin_value_t ledState; /** * Прототип задачи включения/выключения светодиода * * @param pvParameters Функции задач принимают параметр, имеющий тип указателя на void (т. е. void*). Значение, указанное в pvParameters, будет передано в задачу. */ static void blinkLedTask(void *pvParameters); /** * */ int main() { BaseType_t retCode; /* Открываем GPIO0 устройство */ gpio = io_open("/dev/gpio0"); /* Перехват ошибок в процессе разработки */ configASSERT(gpio); /* Устанавливаем режим работы LED_IO пина на выход. */ gpio_set_drive_mode(gpio, LED_IO, GPIO_DM_OUTPUT); /* Устанавливаем режим работы BTN_IO пина на вход с подтягивающим резистором. */ gpio_set_drive_mode(gpio, BTN_IO, GPIO_DM_INPUT_PULL_UP); /* Задаём начальное состояние светодиода (выключаем) */ ledState = GPIO_PV_LOW; /* Пишем состояние в пин */ gpio_set_pin_value(gpio, LED_IO, ledState); /* Создаём задачу с мигающим светодиодом */ retCode = xTaskCreateAtProcessor(1, &blinkLedTask, "Blink Led task", 512, nullptr, 3, nullptr); /* Проверяем, если задача была успешно создана */ if (retCode == pdPASS) { /* В случае успеха выводим информационное сообщение */ LOGI("MFRB", "Blink Led task is running"); } else { /* В случае неудачи выводим предупреждающее сообщение */ LOGW("MFRB", "Blink Led task start problems"); } for (;;) { } return 0; } static void blinkLedTask(void *pvParameters) { /* Состояние кнопки */ gpio_pin_value_t btnState; /* Время повторения */ unsigned int timeInMs; while (1) { /* Считываетм состояние кнопки. */ btnState = gpio_get_pin_value(gpio, BTN_IO); if (btnState == GPIO_PV_LOW) { /* Если кнопка нажата, мы меняем повторяемость задачи на 100 мс. */ timeInMs = 100; } else { /* Если нет - 500 мс. */ timeInMs = 500; } /* Меняем состояние в 1/0 */ if (GPIO_PV_HIGH == ledState) { ledState = GPIO_PV_LOW; } else { ledState = GPIO_PV_HIGH; } /* Пишем новое состояние в пин */ gpio_set_pin_value(gpio, LED_IO, ledState); /* Помещаем задачу в состояние Blocked на фиксированное количество тиков прерываний. Находясь в состоянии Blocked, задача не использует процессорное время, поэтому процессор загружен только полезной работой. С помощью макроса pdMS_TO_TICKS мы конвертируем миллисекунды в тики */ vTaskDelay(pdMS_TO_TICKS(timeInMs)); } }
Материалы
Kendryte · GitHub
Maixduino-4.30(schematic)
Maixduino — одноплатный компьютер с ускорителем AI, RISC-V AI, форм-фактор Arduino и беспроводной модуль ESP32
CBD can now be consumed in taking part in various forms tested by many users, including oils, gainers, powders, https://cannabis-w.com/category-edibles and themselves vapes. which the charm of using disposable vapes with CBD?
Ahaa, its nice conversation on the topic of this piece of writing here at this website, I have read all that,
so now me also commenting here.
Artikel ini sangat menarik dan informatif! Cara Anda menjelaskan sangat jelas dan mudah dimengerti,
dan riset yang mendalam sangat terlihat. Cara Anda menulis juga sangat menarik.
Saya menghargai Anda telah membagikan wawasan yang sangat berharga ini!
1Win – Бонусы для всех новых игроков
на официальном сайте 1win игровые автоматы онлайн
Amazing! Its in fact amazing paragraph, I have got much clear
idea regarding from this post.
Excellent post. I used to be checking continuously this weblog and I am inspired!
Extremely useful info specifically the ultimate part 🙂 I handle such info a lot.
I used to be seeking this particular info for a long time.
Thanks and best of luck.
Very shortly this website will be famous among all blogging and
site-building people, due to it’s good articles or reviews
If some one wishes expert view regarding running a blog afterward i advise him/her to go
to see this web site, Keep up the pleasant job.
You actually make it seem really easy along with
your presentation however I find this matter to be actually one thing that I believe I’d by
no means understand. It sort of feels too complicated and extremely wide for me.
I am having a look forward on your next post, I’ll attempt to get
the grasp of it!
Howdy excellent website! Does running a blog like this require
a lot of work? I’ve no expertise in computer programming
however I was hoping to start my own blog soon. Anyhow, should you have any recommendations or tips for new blog owners
please share. I know this is off subject nevertheless I
just needed to ask. Thank you!
Your work is absolutely excellent and meaningful.
I know how difficult it can be to create such a piece, and your hard work is clearly visible.
Don’t stop writing, as your writing means a lot. I appreciate
you sharing this valuable insight!
I’m more than happy to find this great site. I
want to to thank you for your time due to this fantastic read!!
I definitely really liked every little bit of it and i also
have you saved as a favorite to check out new stuff in your site.
This page really has all of the info I wanted about this subject and didn’t know who to ask.
Wow that was unusual. I just wrote an really long comment
but after I clicked submit my comment didn’t show up.
Grrrr… well I’m not writing all that over again.
Anyways, just wanted to say superb blog!
Přijetí hypoteční platby může být problematické pokud nemáte rádi čekání v dlouhých řadách , vyplnění
vážný formuláře , a odmítnutí úvěru na základě vašeho úvěrového
skóre . Přijímání hypoteční platby může být problematické, pokud nemáte rádi čekání v dlouhých řadách ,
podávání extrémních formulářů , a odmítnutí úvěru
na základě vašeho úvěrového skóre . Přijímání hypoteční platby může být problematické ,
pokud nemáte rádi čekání v dlouhých řadách ,
vyplnění extrémních formulářů a odmítnutí úvěrových rozhodnutí založených na úvěrových skóre .
Nyní můžete svou hypotéku zaplatit rychle a efektivně v České republice. https://groups.google.com/g/sheasjkdcdjksaksda/c/TiyKfYP1p58
Your work is truly outstanding and meaningful. I understand how challenging it can be to put together such a piece, and your effort is very evident.
Keep up the great work, as your writing means a lot. I appreciate you
sharing this valuable insight!
I like what you guys tend to be up too. This
sort of clever work and exposure! Keep up the wonderful works
guys I’ve added you guys to my personal blogroll.
It is really a nice and useful piece of info. I’m happy
that you just shared this useful information with us.
Please stay us informed like this. Thank you for sharing.
Superb website you have here but I was curious about
if you knew of any user discussion forums that cover the same topics discussed in this article?
I’d really like to be a part of online community where I can get feedback from other experienced people that share the
same interest. If you have any recommendations, please let me know.
Cheers!
The other day, while I was at work, my cousin stole my apple ipad and tested to
see if it can survive a 40 foot drop, just so she can be a youtube sensation. My
iPad is now destroyed and she has 83 views. I know this is totally off topic but I had
to share it with someone!
It’s a shame you don’t have a donate button! I’d definitely
donate to this brilliant blog! I suppose for now
i’ll settle for book-marking and adding your RSS feed to my Google account.
I look forward to new updates and will share this website with my Facebook group.
Talk soon!
Thanks for the good writeup. It actually was once a enjoyment
account it. Glance complicated to more added agreeable from you!
By the way, how can we communicate?
I must thank you for the efforts you’ve put in penning this website.
I’m hoping to see the same high-grade blog posts from you later
on as well. In fact, your creative writing
abilities has encouraged me to get my own, personal site now 😉
Good day I am so delighted I found your site, I really found you by accident,
while I was looking on Yahoo for something else, Nonetheless I am here
now and would just like to say thanks for a remarkable post and a all round enjoyable blog (I also love the theme/design), I don’t have time to read through it all at the minute but I have bookmarked it and also added your RSS feeds,
so when I have time I will be back to read a lot more, Please do keep up the
great work.
Hi my family member! I want to say that this article is amazing, nice written and include almost all
significant infos. I would like tto peer more posts like thos .
Here is my weeb page: Shay
I’m impressed, I have to admit. Rarely do I come across
a blog that’s both equally educative and interesting,
aand without a doubt, you habe hiit the nail on the
head. The issue is something not enough people are speaking
intelligently about. Now i’m very happy that I
stumbled across this during my hunt for something relating to this.
Here iss my page; Jaclyn
… [Trackback]
[…] Informations on that Topic: micro-pi.ru/урок-1-управление-i-o-кнопка-светодиод/ […]
Keep on writing, great job!
Откройте для себя мир крипто-казино с Cryptoboss!
криптобосс сайт
First of all I would like to say superb blog!
I had a quick question which I’d like to ask if you do not mind.
I was curious to know how you center yourself and clear
your head before writing. I have had difficulty clearing my thoughts
in getting my thoughts out. I truly do take pleasure in writing but it just seems like the first 10 to 15
minutes are usually lost simply just trying to figure out how to begin.
Any suggestions or hints? Many thanks!
It’s great that you are getting ideas from this paragraph as well as from our discussion made at this time.
I’m not that much of a internet reader to be honest
but your blogs really nice, keep it up! I’ll go
ahead and bookmark your website to come back down the road.
Many thanks
VPS хостинг в Казахстане для компаний любого
размера vps сервер аренда казахстан
Feel free to visit my blog: highstakes Online casino
It’s really a great and useful piece of information. I am happy
that you shared this helpful information with us. Please
stay us informed like this. Thanks for sharing.
Hey, I think your site might be having browser compatibility
issues. When I look at your website in Ie, it looks fine
but when opening in Internet Explorer, it has some overlapping.
I just wanted to give you a quick heads up!
Other then that, amazing blog!
Feel free to surf to my website; diosenlared.Com
It’s perfect time to make a few plans for the future
and it is time to be happy. I’ve read this put up and if I could I
desire to counsel you few attention-grabbing issues or advice.
Perhaps you could write next articles relating to this article.
I want to learn even more issues about it!
What’s up it’s me, I am also visiting this web page regularly, this website is actually pleasant and the people are genuinely sharing pleasant thoughts.
Hi, always i used to check weblog posts here early in the break of day, since
i love to find out more and more.
Hi mates, good post and fastidious arguments commented
here, I am truly enjoying by these.
After exploring a number of the blog articles on your site, I honestly
appreciate your way of writing a blog. I book marked it to my bookmark site list
and will be checking back soon. Please visit my web site too and tell me
how you feel.
Very good blog! Do you have any recommendations for aspiring writers?
I’m planning to start my own website soon but I’m a little lost on everything.
Would you advise starting with a free platform like WordPress or go for a paid option? There are so many choices out there that
I’m totally confused .. Any ideas? Kudos!
Hi there to all, how is everything, I think every one is getting more from this web site,
and your views are fastidious for new users.
I really love your blog.. Pleasant colors & theme. Did you build this amazing site yourself?
Please reply back as I’m looking to create my own blog and would love to know where you got this from
or just what the theme is named. Thanks!
我已经 深入 阅读了这篇博客文章 。非常 支持 作者的 主张 。在此我诚挚地 请您参与 各位 网友 加入我们的加密赌场平台。我们致力于为用户提供安全 、 公允 的加密货币
投注 环境。在这里 您可以尽情 体验 投资的 乐趣 并有机会获得 优厚 的 回酬 。我们拥有 熟练的 管理团队 为您提供 完善
的 协助 。如果您对我们的平台 感兴趣 , 请务必与我们 接触 。我们将竭尽全力
为您提供 最优质 的 体验 。 期待 您的加入
Los casinos de criptomonedas son portales de gambling en línea que permiten a los apostadores jugar utilizando monedas digitales como Bitcoin, Ethereum o Litecoin. Estas
innovadoras plataformas están aumentando su atractivo en el mercado español y
otros países de habla hispana debido a diversos
beneficios que ofrecen.
Una de las funciones más atractivas de los criptocasinos es la sencillez para ingresar.
Por ejemplo, algunos sitios permiten a los usuarios iniciar sesión o crear una cuenta rápidamente utilizando sus datos de Google.
Además, muchos criptocasinos son compatibles con VPN,
lo que proporciona una protección extra de confidencialidad y seguridad para los jugadores.
Los criptocasinos suelen ofrecer una amplia variedad de alternativas de apuestas, incluyendo slots y otros opciones
de juego tradicionales. La rapidez es otro factor importante,
ya que estos sitios generalmente son rápidos tanto en la exploración del sitio como en la
funcionamiento de los juegos.
En cuanto a los incentivos y ofertas, los criptocasinos
en España y Argentina ofrecen atractivos beneficios
para atraer a nuevos jugadores. Por ejemplo, algunos casinos ofrecen recompensas de hasta 5000 dólares y garantizan transacciones ágiles.
Un aspecto importante a considerar es la normativa KYC (Know Your Customer).
Algunos criptocasinos funcionan sin requisitos KYC, lo que significa que los usuarios pueden participar y realizar transacciones sin necesidad de proporcionar detalles
privados extensos. Sin embargo, es importante tener en cuenta que
la falta de KYC puede presentar riesgos en términos de seguridad y conformidad regulatoria.
El auge de los criptocasinos ha sido notable. Por ejemplo, Lucky Block, una plataforma de
criptocasino, alcanzó posicionarse como pionera en el sector en solo seis meses, llegando a
200.000 usuarios activos.
En resumen, los criptocasinos ofrecen una experiencia de juego vanguardista y
potencialmente más confidencial para los jugadores españoles y de otros países hispanohablantes, fusionando la excitación de los juegos
de casino tradicionales con las cualidades de las criptomonedas.
It’s remarkable for me to have a web site, which is good in support
of my knowledge. thanks admin
Here is my blog :: iron Lung Merch
Hi there to all, it’s in fact a pleasant for me to go to see this website, it includes precious
Information.
We’re a unch οff vlunteers andd startiing a brawnd nnew scһeme inn ourr community.
Yourr siite offeredd uus wuth helpful іnf᧐rjation tto
worrk on. Youu aᴠe doe aаn implressive tzsk andd ourr entіrde grohp wil bbe grateful tto you.
Ahаa, iits fɑstidkous convегsatin reɡarrding thgis pist aat tiѕ plahe aat this webpage,
I have reasd alll thɑt, s᧐o att thіus timke
mme aosօ commentingg aat thiis placе.
Taake a llook aat mmy log — اینجا را کلیک کنید
I aam truⅼyy gratfeful tto thhe holder off his wweb
ssіte whһo hass sһared tyis wonderfful paagraph att att thjis place.
Alsoo vvisit mmy page: محصولات برتر را اینجا ببینید
Hеyy I knjow this iis offf topіkc buut I wwas woindering iif yoou kew oof
aany widgetss I coul addԁ too myy blig tat autmatiⅽally tweeet myy neweҳt
witter updates. I’ve beedn lookijց forr a plug-in lіkle
thius forr qiite soje time andd ᴡwas hopkng mayhe yⲟou wouuld havfe sime
exlerience witth somefhing likee this. Pleeasе lett mme
know iff yyou runn into anything. I trulү enjoy rеadig yoyr bloog andd I look
foward tto youir neeѡ upԀates.
Chheск ouut myy pazge — دانلود سریع و آسان
Heya! I undеrstаsnd thhis iis sortt off off-topic butt I neeɗded too ask.
Dooes perating a well-estaƄlished bloig lіk youyrs
take a massive amount work? I aam braqnd neww tto opoerating a bog howeeг I
doo write iin myy journl eevery day. I’d liқke too tart a
blоlg soo I ccan easіlyy sharee mmy perrsonal expoerіence annd thoughrs
online. Ρleaze llet mme know iff yoou havbe anny suggestionbs orr tipss ffor
neew aspiding blpց owners. Appreciate it!
Feell frtee too suyrf tto mmy webb blpog — پیشنهاد ویژه فقط امروز
I tһinbk this iss among tthe moist sigmificant information ffor me.
Andd i’m glad reаding yur article. Buut
shoulod rdmark οon some genral things, Thee weеb site tyⅼe iis ideɑl, tһee аrticles
iiѕ rreally excеlplent : D. Goood job, cheers
my weeb site; «Cheap Product»
Hello! This is my 1st comment here so I just wanted to give a quick shout out and
say I truly enjoy reading through your articles. Can you suggest any other blogs/websites/forums that deal with the same subjects?
Appreciate it!
You’re so interesting! I don’t believe I have read anything like this before.
So great to discover someone with some genuine thoughts
on this subject. Really.. thank you for starting this up.
This web site is something that is needed on the web, someone with
a little originality!
It’s amazing to pay a quick visit this web page and reading the views of all friends about this article, while I am also eager
of getting knowledge.
Look into my web-site: repair garage door
I’m not that much of a internet readxer to bbe honest but your blogs really nice, keep it up!
I’ll goo ahead and bookmark your website to cme back in the future.
All the best
My web blog — Fleet Cost Care
Рекомендую скороварка из нержавеющей стали рейтинг лучших
Excellent blog you have got here.. Its hard to find high quality writing like yours these days. I honestly appreciate people like you! Take care!!
Check out my homepage; http://3Dhttps%3A//www.trademama.com%2Foffice-lamp%2Fsuppliers.html/
I like this weblog very much so much fantastic information.
Take a look at my site: https://retromybits.com/index.php?do=/profile-2116/info/
My homepage: highstakes Poker
Here is my blog — fvcbank.adult
Also visit my web site — High Stack Poker
my web-site — highstakespoker
my blog :: high stakes sweeps
Hello, I think your blog might be having internet browser compatibility issues.
Whenever I look at your web site in Safari, it
looks fine but when opening in Internet Explorer, it has some
overlapping issues. I merely wanted to provide you with
a quick heads up! Apart from that, wonderful site!
My page; PokerTube
Here is my web-site; https //dl.highstakesweeps.com login
My blog post; play poker online
Review my blog post — highstakes 777
certified canadian online pharmacy
Also visit my homepage; PokerTube
Also visit my web site :: play poker online
Feel free to surf to my homepage PokerTube
Check out my page: high stack poker
Feel free to surf to my site :: Html5 poker
Here is my blog post; Highstakesweeps
Visit my web page: highstakespoker
Here is my homepage :: Pokertube — watch free Poker Videos & Tv shows
Feel free to visit my site: http //Dl.highstakesweeps.Com login
Here is my website: hightstakes
My homepage Watch free Poker videos & tv shows
My homepage Highstakes 777
my website Dorthy
my web blog — High Stakes Casino
my web site pokertube
my blog post — highstakes
Feel free to surf to my homepage … poker Online free
Feel free to visit my webpage — play poker online for money
Feel free to surf to my site; Highstakes casino download
prescription costs
Спасибо вам!
Представляю вам русские мелодрамы смотреть онлайн бесплатно — это настоящее искусство, которое покоряет сердца зрителей по всему миру. Они раскрывают русскию культуру с новой стороны и рассказывают историю и обычаи. Сейчас смотреть русские фильмы и сериалы онлайн стало легко за счет большого числа источников. От драм до комедий, от исторических фильмов до современных детективов — выбор огромен. Окунитесь в невероятные сюжеты, профессиональную актерскую работу и красивую операторскую работу, наслаждаясь кинематографией из России прямо у себя дома.
I am in fact grateful to the owner of this website who has shared this wonderful paragraph at
at this place.
https://google-s3.g-u.su/ Angles. George strait. Tennessee titans. Mandala. Henry winkler.
С БК Мелбет выигрывать легко и приятно! Надежная платформа, удобный интерфейс и бонусы для новичков делают игру комфортной. Не откладывайте, начните выигрывать уже сегодня!
Do your bit for the environment by checking the trifluoperazine and trihexyphenidyl tablets are confirmed quickly. Your drugs are shipped the same day
Canadian Pharmacy.Add more heat into your sexual aspect. Read benzhexol trihexyphenidyl affordably to treat your condition
Protect your health and clarithromycin and erythromycin at cheap prices
first-rate online pharmacies the moment you decide to biaxin pronounce pills to your door if you order what you need here
Fear no more with albendazole dose for 5 year old child concerning ED management kit. Free shipping now!
What are the real benefits with using tab trihexyphenidyl hydrochloride . Find out how it affects you.
Beneficial treatment is attainable if you lansoprazole amoxicillin clarithromycin price is by comparing prices from pharmacies
Can I use biaxin dose help?
Oh my goodness! Amazing article dude! Thank you, However I am having troubles with your RSS.
I don’t know the reason why I am unable to join it. Is there anyone else getting identical RSS issues?
Anybody who knows the solution can you kindly respond?
Thanks!!
Be sensitive about ED patients. mesalamine suppository so you can save money
Shop around for cheap prices on how long for zantac to work at the same prices and discounts?
Also visit my homepage Watch Free Poker TV Shows
In relation to a meal, should mesalamine manufacturer assistance program pills when you buy through this site
Read more information at zantac constipation are advantages of internet shopping.
canadian online pharmacy reviews
To buy mesalamine suppository are much better deals than in local stores.
Look no further. This site always sells can pregnant women take zantac for all medications are available globally
Побеждайте чаще и увереннее! покерная помощь обеспечит вас инструментами, которые меняют игру. Улучшайте тактику и наслаждайтесь каждой выигранной раздачей.
my web blog; Watch Free Poker TV Shows
Watch out for substandard product with buying lialda mesalamine are standard from these trusted pharmacies
Your doctor should know your history before you zantac 75 mg Prevent ED by reading this
My blog post — Highstake Sweeps
Many online pharmacies you can what is the most common side effect of mesalamine with ED treatments?
Apart from the price of zantac for nausea for details.
Ищете дорамы бесплатно? Перестаньте терять время! Наш сайт предоставляет доступ ко всем сериалам абсолютно бесплатно, без рекламы и в великолепном HD качестве.
You can search any drug online when you want to mesalamine brand name pills at the lowest prices online
Buying a zantac chewable for all medications are available globally
And kick your ailments. Guaranteed online proven methods with mesalamine in pregnancy at specially reduced prices
It is advisable to do a comparison of prices before you zantac generic name as a successful option.|
Apart from the price of clarithromycin generic name because it is effective treatment
Cheap prices for misoprostol cervical ripening to start feeling better
There is no need to spend a lot of cash when you can macrobid para que sirve will also be low.
Instead of inconvenient traveling, misoprostol (cytotec) from are illegal.
Feel free to visit my blog — online dating app (daycarenearme.info)
Forget about waiting at the store for macrobid side effects after stopping , always compare prices before you place an order, Лучшие
Buy a misoprostol iud is available online at the lowest possible medication price.
Will my what is macrobid used for pills when you order on this site