Code Monkey home page Code Monkey logo

lk-procamp-hw11's Introduction

LK PROCAMP HOME WORK 11

Task

Це домашнє завдання поєднує елементи з декількох попередніх. В L04 ви працювали зі списками, в L06 — з таймерами і в L07 з перериваннями.

Тепер:

Створіть тип (структуру) даних для збереження у спискові, яка включає послідовний номер та час ktime.

Створіть тип даних для голови списка, яка включає спінлок для обмеження доступу до списку. Також тут буде поле поточного номера для запису у структуру даних списку. Статично створіть екземпляр такої структури. Бажано і спінлок, і голову списку проініціалізувати статично в C99-стилі відповідними макросами, але можна і викликами з init-функції.

Подібно до L04 на етапі цініціалізації виділіть пам'ять для п'яти елементів списку, проініціалізуйте поля номера та часу нулями і розмістіть їх у списку (друкувати нічого не треба). Це буде кільцевий список подій.

Ініціалізуйте переривання, як в L07, та за зразком L06 періодичний таймер (jiffies) з періодом одна секунда.

У таймерній функції Інкрементуйте поточний номер і отримайте поточний час. Отримайте вказівник на перший елемент (не вилучаючи його зі списку), і якщо поточний номер у структурі нульовий, то * занесіть в його поля новий поточний номер та час (ktime). * проверність список (list_rotate_left()), таким чином роблячи щойно заповнений елемент останнім інакше надрукуйте повідомлення про переповнення списку з номером, який не вдалося розмістити.

У thread_fn обробника переривання Пройдіть по списку (safe тут непотрібне) з голови до першого елемента, у якого поточний номер не нульовий. Якщо такий елемент є, скопіюйте значення полів у локальні змінні, зануліть поля елемента і вийдіть з циклу. Після розблокування списку (лок ми стараємося зайняти на якомога малий час) надрукуйте номер і час, або повідомлення, що у списку не було заповненого елемента.

Не забудьте заблокувати доступ до списку відповідними спінлоком (у вас зі списком працює таймерна bh функція і thread обробника переривань).

В exit все звільніть у правильному порядку.

Залежно від співвідношення періода таймера та частоти натискання кнопки можна отримати різний друк. Для полегшення отримання вищої частоти можна переривання від кнопки зробити по обох перепадах.

lk-procamp-hw11's People

Contributors

vlykhohub avatar

Watchers

Viacheslav Lykhohub avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.