LPC175x and LPC176x Standard Peripheral Firmware Driver Library

Взяв я трохи поколупати платку з мікроконтролером LPC1768.
Спробував використати стандартну бібліотеку lpc17xx cmsis driver library, щоб трохи менше думати. Звісно, документацію на мікроконтролер все одно читати треба. Але здалося простіше викликати функцію для налаштування потрібної периферії, передавши їй кілька парметрів, ніж самому уважно комбінувати ті параметри в кілька регістрів. Та ще й, можливо, про порядок запису треба буде думати.

З часів інтелівського ApBUILDER-а — програми для генерації коду ініціалізації для MCS-51, MCS-196, … — я всю роботу з периферією завжди робив вручну. Тобто, я і до цього робив вручну, а тим ApBUILDER-ом спробував і відмовився. І знову лише вручну. Читаєш собі документацію на потрібний модуль та й потихеньку пишеш всі ці маски/зсуви. Константи для них у файлах від компілятора чи виробника мікроконтролерів є — і то добре.
А тут — на тобі… Вирішив полінуватися…

»»» Читати про покарання за лінощі

Attached Files:

Використання секцій в GCC

Нехай перед нами стоїть наступна задача. Програма може складатися з набору модулів, які комбінуються в залежності від потреб. Кожен модуль має функцію, яка викликається при його виборі в простому меню на терміналі. Також є текстовий рядок та літера для меню. Ми хочемо автоматизувати процес збирання програми таким чином, що при підключення модуля в проект він «сам» ініціалізується і «реєструється» в програмі до початку роботи main(). В C++ це робиться за допомогою конструкторів, але при цьому розмір програми росте. В C можна в окремому файлі створити масив структур опису модулів і ініціалізувати його статично. Щоправда, при цьому доведеться ініціалізувати модулі окремим циклом на початку функції main() (теж трохи додаткового коду) та для формування масиву залежно від потреб використовувати #ifdef / #endif.

Зрозуміло, якщо «з першого акту на стіні висить рушниця» моделі «використання секцій», то тут стрілятиме саме вона.
»»» Читати далі — автоматизація реєстрації модулів за допомогою секцій…

Attached Files:

  • zip GCC sections usage demo

    avr-gcc, atmega168. Code::Blocks project with external makefile (can be used with any IDE or without IDE)

Секції .init в avr-gcc

Для програм, написаних мовою С чи С++, часто буває зручно, а іноді просто необхідно проініціалізувати якісь ресурси мікроконтролера до початку роботи фунцкії main() (для C++ — до початку роботи конструкторів статичних об’єктів). В багатьох системах програмування для цього використовується функція на зразок low_level_init(), яка викликається з С-шної «запускалки» (start-up module) і має бути визначеною десь в проекті. Якщо такої функції нема, тобто програміст її не написав у даному проекті, то з бібліотеки береться коротка «затичка» (stub), яка просто нічого не робить.

У avr-gcc це зроблено дещо по-іншому. Використовуються можливості системи програмування по обробці секцій (сегментів, sections, segments) програми. Вашій увазі пропонується невеличкий приклад з детальним описом.
Continue reading ‘Секції .init в avr-gcc’ »

Attached Files:

scmRTOS

scmRTOS – це компактна проста ОСРЧ для мікроконтроллерів, створена Гарі Журовим (Harry Zhurov). Поточна версія — 4.00.
Існують порти scmRTOS для наступних серій мікроконтролерів:

  • ARM7 — GCC;
  • AVR (Atmel) — GCC, IAR;
  • Blackfin (Analog Devices) — VDSP;
  • Cortex-M3 — GCC, IAR;
  • Cortex-M0 — GCC (на даний момент розміщено в гілці pre-v400);
  • MSP430 (Texas Instruments) — GCC, IAR;
  • STM8 (ST Microelectronics) — IAR.

Використовуйте лінк Download GNU tarball в нижній частині сторінки для вибраного мікроконтролера або завантажуйте архів зі сторінки scmRTOS на sourceforge
Використовуйте сторінку trunk для отримання найсвіжіших версій.

З мікроконтролерів AVR підтримуютьcя «звичайні» megaAVR включно з ATmega256x.

Опис scmRTOS v4.00 російською та англійською мовами.
Сторінка проекту на sourceforge.net.
scmRTOS Wiki (англійською)
Група google для обговорння проекту (російською, краще підписатися на розсилку поштою, бо через web-інтерфейс половина листів не читається).
Розділ, присвячений scmRTOS, на форумі electronix.

scmRTOS може бути використано з Arduino, дивіться тему на форумі Arduino, сховище git та статтю про це російською мовою.

Тут я пропоную увазі детальне пояснення одного з поширюваних з системою прикладів 1-EventFlag.

Пояснення призначене для тих, хто ще не надто знайомий з роботою ОС з витісненням і «на ніжках» показує, що відбувається в системі. Для демонстрації процесів в приклад було внесено деякі зміни, в основному, додано індикацію стану системи на виводах мікроконтроллера для спостереження осцилографом/логічним аналізатором. Команди для індикації стану було додано також в процедуру перемикання контекстів (встановлення виводу першою командою макросу save_context та скидання останньою командою макросу restore_context в файлі OS_Target_asm.S). З розміщеного в репозиторії коду ці команди видалено.

[flagcounter image]