fk0, легенда (13.10.2011 19:56, просмотров: 652) ответил rezident на Ну-ну, покажите-ка как это будет выглядеть в виде дефайнов, если состояние матрицы вы получаете по связи? ;)
Полезны аж 3 прослойки (ассемблеристам дальше лучше не читать): * т.н. "Hardware Presentation Level" специфичном для конкретного железа в конкретной ситуации (GPIO, например, TRIS и LAT регистры) -- в простых случаях может быть и через define определяться, например SCL и SDA макросы для софтового I2C;
* "Hardware Adaptaion Level", где примером может служить конкретная микросхема EEPROM, например, но подключенная к MCU через GPIO в HPL-прослойке -- т.е. драйвер этого уровня, например софтовый I2C, умеет управлять микросхемой, но только через соответствующий HPL-уровень (ножки MCU);
* и наконец "Hardware Interface Level", который позволяет дать одинаковый программный интерфейс "устройство с поблочной записью" для разных микросхем памяти, например, для EEPROM и для NOR-flash.
Суть последнего слоя -- чисто программная прослойка, часто не нужная в небольших проектах. Она нужна исключительно для создания некоторого интерфейса между прикладной программой и драйвером той же микросхемы памяти.
Суть слоя HPL -- специфика именно данной аппаратной платформы. Т.е. данной печатной платы, например.
Суть слоя HAL -- именно "драйвер" в классическом понимании, но отвязанный от конкретного железа (через HPL), т.е. может, например работать на разных печатных платах, на разных микроконтроллерах. Но если микросхема памяти меняется на несовместимую -- заменяется этот уровень (посредством HIL).
Нужно ещё сказать что понимать под слоем. HPL может быть простыми inline функциями или макросами. В любом случае там не рационально содержать сложную логику. Она должна быть в HAL. А слой HIL, например для микросхемы EEPROM, просто при вызове file_write(offset, data, size) вызывает функции eeprom_page_write(page, data), вот и вся логика.
Хотя, конечно, всё это полное фуфло и программы на ассемблере оптимизированные вручную работают аж на 60% быстрее...
[ZX]