{"id":8534,"date":"2019-11-21T12:26:21","date_gmt":"2019-11-21T11:26:21","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=8534"},"modified":"2025-05-07T11:56:59","modified_gmt":"2025-05-07T09:56:59","slug":"autosar-cdd-dos-donts-and-best-practices","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/autosar-cdd-dos-donts-and-best-practices\/","title":{"rendered":"AUTOSAR CDD \u2013 \u201edo\u2019s\u201d, \u201edon\u2019ts\u201d and best practices"},"content":{"rendered":"\n<p>Powsta\u0142e w 2003 roku konsorcjum AUTOSAR (AUTomotive Open System ARchitecture) postawi\u0142o sobie za g\u0142\u00f3wny cel zestandaryzowanie architektury oprogramowania dla bran\u017cy Automotive.<\/p>\n\n\n\n<p>Standaryzacja zosta\u0142a wymuszona ogromnym wzrostem ilo\u015bci oprogramowania we wsp\u00f3\u0142czesnych samochodach, mnogo\u015bci\u0105 platform sprz\u0119towych, du\u017c\u0105 ilo\u015bci\u0105 niekompatybilnych ze sob\u0105 konkurencyjnych rozwi\u0105za\u0144, ma\u0142ym <em>reusability<\/em> mi\u0119dzy systemami (oraz generacjami).<\/p>\n\n\n\n<p>Konsorcjum skupi\u0142o si\u0119 na standaryzacji najwa\u017cniejszych komponent\u00f3w systemu: stos\u00f3w komunikacyjnych (CAN, Eth, SPI), stosu obs\u0142ugi pami\u0119ci nieulotnej, obs\u0142ugi watchdog\u00f3w, systemu zarz\u0105dzania b\u0142\u0119dami (DTC).<\/p>\n\n\n\n<p>Oczywi\u015bcie zdawano sobie spraw\u0119, i\u017c nie uda si\u0119 zdefiniowa\u0107 standardu dla wszystkich funkcjonalno\u015bci, zw\u0142aszcza bardzo specyficznych dla ko\u0144cowego klienta (OEM) czy te\u017c obszaru dzia\u0142ania systemu. Z tego powodu zarezerwowano w architekturze AUTOSAR obszar zwany Complex Device Drivers (CDD), w kt\u00f3rym powinna si\u0119 znale\u017a\u0107 obs\u0142uga funkcjonalno\u015bci nieopisanych w dokumentacji. Niestety nie zawsze CDD jest wykorzystywane zgodnie ze swoim przeznaczeniem. Co dok\u0142adnie powinno si\u0119 w nim znale\u017a\u0107, a czego tam nie umieszcza\u0107 &#8211; om\u00f3wimy w tym artykule.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Architektura AUTOSAR<\/h2>\n\n\n\n<p>Aby przej\u015b\u0107 do sedna, przypomnijmy og\u00f3lny zarys architektury AUTOSAR oraz przeznaczenie poszczeg\u00f3lnych warstw. Pozwoli nam to lepiej zrozumie\u0107 kontekst w jakim znajduje si\u0119 CDD.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.1. Spojrzenie wysokopoziomowe<\/h3>\n\n\n\n<p>Na najbardziej og\u00f3lnym poziomie, architektura AUTOSAR sk\u0142ada si\u0119 z 3 warstw (Rysunek 1).<\/p>\n\n\n\n<div class=\"wp-block-image wp-image-8535 size-full\"><figure class=\"aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/arch.png\"><img decoding=\"async\" width=\"1198\" height=\"516\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/arch.png\" alt=\"Architektura AUTOSAR\" class=\"wp-image-8535\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/arch.png 1198w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/arch-300x129.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/arch-1024x441.png 1024w\" sizes=\"(max-width: 1198px) 100vw, 1198px\" \/><\/a><figcaption>Ryc. 1 Architektura AUTOSAR<\/figcaption><\/figure><\/div>\n\n\n\n<p>Warstwa Aplikacji, jak nazwa wskazuje, jest przeznaczona na komponenty aplikacyjne. Tutaj powinni\u015bmy umieszcza\u0107 software komponenty (SW-C), kt\u00f3re odpowiadaj\u0105 za logik\u0119 systemu. SW-C powinny by\u0107 zaimplementowane tak, aby by\u0142y zupe\u0142nie niezale\u017cne od sprz\u0119tu i operowa\u0142y na poj\u0119ciach abstrakcyjnych, jak temperatura, ci\u015bnienie, stan ON\/OFF\u2026 &#8211; bez znaczenia czy dane te pochodz\u0105 od innych SW-C, czujnik\u00f3w fizycznych, oblicze\u0144 symulacji, czy te\u017c z danych przys\u0142anych protoko\u0142ami komunikacyjnymi.<\/p>\n\n\n\n<p>W warstwie Aplikacji AUTOSAR nie definiuje modu\u0142\u00f3w ani ich funkcjonalno\u015bci (jest to oczywi\u015bcie zale\u017cne od projektu), narzuca natomiast rodzaje interfejs\u00f3w i punkt\u00f3w dost\u0119pu (zwanych PORTAMI) oraz sposob\u00f3w, w jaki SW-C mog\u0105 si\u0119 komunikowa\u0107 ze sob\u0105 oraz \u015bwiatem zewn\u0119trznym. Cz\u0119sto OEM dostarcza cze\u015b\u0107 lub wszystkie SW-C. Standaryzacja AUTOSAR u\u0142atwia integracj\u0119 warstwy aplikacji.<\/p>\n\n\n\n<p>Warstwa RTE \u0142\u0105czy ze sob\u0105 BSW oraz APP, jest tak\u017ce odpowiedzialna za ca\u0142\u0105 komunikacj\u0119 pomi\u0119dzy SW-C. Odcina warstw\u0119 aplikacji od \u015bwiata fizycznego i uniezale\u017cnia od sprz\u0119tu. RTE wraz z BSW implementuje koncepcj\u0119 Virtual Functional Bus (VFB) \u2013 po szczeg\u00f3\u0142y odsy\u0142am do <a href=\"https:\/\/www.autosar.org\/fileadmin\/user_upload\/standards\/classic\/4-3\/AUTOSAR_EXP_VFB.pdf\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\" rel=\"nofollow\" >dokumentacji AUTOSAR<\/a>.<\/p>\n\n\n\n<p>Najni\u017csza warstwa \u2013 BSW &#8211; odpowiada za obs\u0142ug\u0119 sprz\u0119tu, a jej implementacja jest mocno od niego zale\u017cna. AUTOSAR bardzo szczeg\u00f3\u0142owo definiuje modu\u0142y tej warstwy &#8211; ich zachowanie oraz interfejsy. W tej warstwie nie powinni\u015bmy implementowa\u0107 logiki aplikacyjnej.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.2. Basic Software (BSW)<\/h3>\n\n\n\n<p>Przyjrzyjmy si\u0119 nieco dok\u0142adniej warstwie BSW<\/p>\n\n\n\n<div class=\"wp-block-image wp-image-8538 size-full\"><figure class=\"aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/bsw.png\"><img decoding=\"async\" width=\"1193\" height=\"323\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/bsw.png\" alt=\"Architektura Basic Software\" class=\"wp-image-8538\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/bsw.png 1193w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/bsw-300x81.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/bsw-1024x277.png 1024w\" sizes=\"(max-width: 1193px) 100vw, 1193px\" \/><\/a><figcaption>Ryc. 2 Architektura Basic Software<\/figcaption><\/figure><\/div>\n\n\n\n<p>Mo\u017cemy tutaj wyr\u00f3\u017cni\u0107 3 podwarstwy oraz interesuj\u0105cy nas blok CDD.<\/p>\n\n\n\n<p>Tym razem zaczniemy od warstwy najni\u017cszej \u2013 Microcontroller Abstraction Layer (MCAL). Odpowiada ona za obs\u0142ug\u0119 mikrokontrolera, na kt\u00f3rym uruchomiony jest nasz system. Warstwa ta najcz\u0119\u015bciej dostarczana jest przez producenta procesora. MCAL ujednolica interfejs do peryferiu\u00f3w uC, umo\u017cliwia to stosunkowo \u0142atwe portowanie systemu na inne platformy \u2013 \u201ewystarczy\u201d podmieni\u0107 MCAL dedykowany dla nowego sprz\u0119tu.<\/p>\n\n\n\n<p>Electronic Control Unit Abstraction Layer (ECUAL) to kolejna warstwa obs\u0142ugi sprz\u0119tu, odpowiedzialna za obs\u0142ug\u0119 element\u00f3w wsp\u00f3\u0142pracuj\u0105cych z naszym uC (wszelkie ASIC, zewn\u0119trzne pami\u0119ci, watchdogi, sensory, etc). Oczywi\u015bcie do komunikacji ze \u015bwiatem zewn\u0119trznym u\u017cywa ona&nbsp;&nbsp; abstrakcji MCAL.<\/p>\n\n\n\n<p>Warstwa serwis\u00f3w (Services Layer) odpowiada za zarz\u0105dzanie i ujednolicenie interfejs\u00f3w dla obs\u0142ugi konkretnych urz\u0105dze\u0144, np. dostarcza interface Nvm_Write(idx) do obs\u0142ugi pami\u0119ci nieulotnych w systemie. Warstwa ta zawiera tak\u017ce system operacyjny czasu rzeczywistego, dlatego z lewej strony rysunku, styka si\u0119 bezpo\u015brednio z uC. Service Layer odpowiada za dostarczenie informacji warstwie aplikacji poprzez RTE.<\/p>\n\n\n\n<p>W przeciwie\u0144stwie do warstwy aplikacji, wszystkie powy\u017csze warstwy BSW s\u0105 bardzo szczeg\u00f3\u0142owo zdefiniowane przez standard AUTOSAR (interfejsy, zachowanie modu\u0142\u00f3w, w jaki spos\u00f3b modu\u0142y musz\u0119 si\u0119 ze sob\u0105 komunikowa\u0107, jakie s\u0105 mo\u017cliwe konfiguracje). Szczeg\u00f3\u0142owa dokumentacja jest dost\u0119pna na stronie autosar.org.<\/p>\n\n\n\n<p>No i wreszcie blok CDD (Complex Device Drivers), rozci\u0105gaj\u0105cy si\u0119 bezpo\u015brednio od uC do warstwy RTE, kt\u00f3ry om\u00f3wimy w dalszej cz\u0119\u015bci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.3. Stosy<\/h3>\n\n\n\n<div class=\"wp-block-image wp-image-8539 size-full\"><figure class=\"aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/stacks.png\"><img decoding=\"async\" width=\"1150\" height=\"315\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/stacks.png\" alt=\"BSW - podzia\u0142 na stosy\" class=\"wp-image-8539\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/stacks.png 1150w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/stacks-300x82.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/stacks-1024x280.png 1024w\" sizes=\"(max-width: 1150px) 100vw, 1150px\" \/><\/a><figcaption>Ryc. 3 BSW &#8211; podzia\u0142 na stosy<\/figcaption><\/figure><\/div>\n\n\n\n<p>Warstw\u0119 BSW mo\u017cemy tak\u017ce rozpatrzy\u0107 pod k\u0105tem realizowanych funkcjonalno\u015bci. Jak wida\u0107 na rysunku 3, da si\u0119 wyodr\u0119bni\u0107 stosy rozci\u0105gaj\u0105ce si\u0119 przez wszystkie warstwy BSW, realizuj\u0105ce konkretne funkcjonalno\u015bci poprzez obs\u0142ug\u0119 peryferi\u00f3w uC, uk\u0142ad\u00f3w zewn\u0119trznych (ASIC) oraz dostarczanie abstrakcyjnych interfejs\u00f3w dla RTE.<\/p>\n\n\n\n<p>Poni\u017cej bardziej szczeg\u00f3\u0142owy przyk\u0142ad stos\u00f3w watchdog oraz NVM:<\/p>\n\n\n\n<div class=\"wp-block-image wp-image-8540 size-full\"><figure class=\"aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/wdg_stack.png\"><img decoding=\"async\" width=\"589\" height=\"680\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/wdg_stack.png\" alt=\"Szczeg\u00f3\u0142owe przedstawienie stos\u00f3w NVM oraz WDG\" class=\"wp-image-8540\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/wdg_stack.png 589w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/wdg_stack-260x300.png 260w\" sizes=\"(max-width: 589px) 100vw, 589px\" \/><\/a><figcaption>Ryc. 4 Szczeg\u00f3\u0142owe przedstawienie stos\u00f3w NVM oraz WDG<\/figcaption><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">2. Complex Device Drivers<\/h2>\n\n\n\n<p>Jak to by\u0142o przedstawione w rozdziale 2.2, CDD to obszar zdefiniowany w BSW. Standard zak\u0142ada, i\u017c powinny w nim znale\u017a\u0107 si\u0119 modu\u0142y, kt\u00f3rych nie definiuje dokumentacja AUTOSAR. Obszar rozci\u0105ga si\u0119 w pionie przez ca\u0142\u0105 warstw\u0119 BSW, styka si\u0119 bezpo\u015brednio z uC oraz warstw\u0105 RTE, tak wi\u0119c ma bezpo\u015bredni dost\u0119p do sprz\u0119tu, mo\u017ce tak\u017ce udost\u0119pnia\u0107 porty dla SW-C. Mo\u017cemy wi\u0119c w CDD implementowa\u0107 zar\u00f3wno sterowniki do peryferii uC, obs\u0142ug\u0119 ASIC\u2019\u00f3w, a tak\u017ce komunikowa\u0107 si\u0119 z warstw\u0105 aplikacji.<\/p>\n\n\n\n<div class=\"wp-block-image wp-image-8542 size-full\"><figure class=\"aligncenter\"><a href=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/autosar-if.png\"><img decoding=\"async\" width=\"1254\" height=\"682\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/autosar-if.png\" alt=\"AUTOSAR - interfejsy\" class=\"wp-image-8542\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/autosar-if.png 1254w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/autosar-if-300x163.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/autosar-if-1024x557.png 1024w\" sizes=\"(max-width: 1254px) 100vw, 1254px\" \/><\/a><figcaption>Ryc. 5 AUTOSAR &#8211; interfejsy<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2.1. Kiedy implementowa\u0107 modu\u0142y w CDD i jak nale\u017cy to robi\u0107<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Sterownik sprz\u0119tu nie zdefiniowany przez standard AUTOSAR <ul><li>Jest to najbardziej oczywisty przypadek. Gdy musimy obs\u0142u\u017cy\u0107 peryferia uC lub uk\u0142ad zewn\u0119trzy, kt\u00f3rego nie definiuje architektura AUTOSAR, powinni\u015bmy jego implementacj\u0119 umie\u015bci\u0107 w\u0142a\u015bnie w obszarze CDD. Nie mo\u017cemy naszego kodu umie\u015bci\u0107 w warstwie aplikacji, poniewa\u017c b\u0119dzie on mocno zale\u017cny od sprz\u0119tu. Poza tym nie b\u0119dziemy mieli mo\u017cliwo\u015bci (lub b\u0119dzie to bardzo utrudnione), aby operowa\u0107 na rejestrach uC, gdy\u017c warstwa RTE b\u0119dzie nas mocno izolowa\u0107 od sprz\u0119tu. <\/li><\/ul><\/li><li>Stos komunikacyjny protoko\u0142u niezdefiniowany przez standard AUTOSAR (np. one-wire) <ul><li>Jest to niejako rozwini\u0119cie poprzedniego punktu. Implementacj\u0119 obs\u0142ugi stos\u00f3w komunikacyjnych AUTOSAR przechowuje w BSW, tak wi\u0119c i nasz stos powinien si\u0119 tutaj znale\u017a\u0107. Zapewne nasz kod b\u0119dzie \u201erozci\u0105gni\u0119ty\u201d w pionie (jak w modelu OSI), warto wi\u0119c zachowa\u0107 modu\u0142owo\u015b\u0107 i warstwowo\u015b\u0107 podobnie do struktury Basic Software. Pomo\u017ce nam to w utrzymaniu kodu, a tak\u017ce np. w przypadku portowania na inn\u0105 platform\u0119 sprz\u0119tow\u0105. <\/li><\/ul><\/li><li>Sterownik zdefiniowany przez AUTSOAR, ale z brakiem wsparcia dla potrzebnej nam funkcjonalno\u015bci: <ul><li>Mo\u017ce si\u0119 zdarzy\u0107, i\u017c w naszym rozwi\u0105zaniu potrzebujemy funkcjonalno\u015bci, kt\u00f3rych AUTOSAR nie definiuje do konkretnych sterownik\u00f3w. Mo\u017cemy w takim przypadku zaimplementowa\u0107 braki w obszarze CDD, rozszerzaj\u0105c tym samym modu\u0142(y) AUTOSAR o dodatkow\u0105 funkcjonalno\u015b\u0107 (nak\u0142adka\/wrapper) b\u0105d\u017a te\u017c stworzy\u0107 zupe\u0142nie now\u0105, odpowiadaj\u0105c\u0105 naszym potrzebom implementacj\u0119 modu\u0142u AUTOSAR \u2013 najlepiej nadal b\u0119d\u0105c kompatybilnym ze standardem. <\/li><\/ul><\/li><li>Sterownik zdefiniowany przez AUTOSAR, ale niespe\u0142niaj\u0105cy wymog\u00f3w wydajno\u015bciowych <ul><li>Sytuacja wyst\u0119puj\u0105ca np. w systemach hard real time lub tam, gdzie mamy bardzo mocno ograniczone zasoby sprz\u0119towe. Mo\u017ce si\u0119 zdarzy\u0107, i\u017c dost\u0119pna implementacja modu\u0142u AUTOSAR nie spe\u0142nia naszych oczekiwa\u0144, je\u015bli chodzi o czas wykonania, gwarantowany czas reakcji, zu\u017cycie RAM lub rozmiar kodu. Niestety sytuacje takie w chwili obecnej zdarzaj\u0105 si\u0119 \u201edo\u015b\u0107 cz\u0119sto\u201d. Masowa produkcja modu\u0142\u00f3w samochod\u00f3w osobowych wymusza oszcz\u0119dno\u015bci na podzespo\u0142ach (tak\u017ce kosztach uC), z drugiej strony firmy dostarczaj\u0105ce implementacje zgodne z AUTOSAR tworz\u0105 rozwi\u0105zania uniwersalne, co oczywi\u015bcie nie mo\u017ce i\u015b\u0107 w parze z wysok\u0105 optymalizacj\u0105 pod ka\u017cdym aspektem. Dodatkowo standard AUTOSAR definiuje ujednolicone API (funkcjonalno\u015bci i interfejs\u00f3w sterownik\u00f3w), a uC r\u00f3\u017cnych rodzin udost\u0119pniaj\u0105 bardzo zr\u00f3\u017cnicowane mo\u017cliwo\u015bci peryferi\u00f3w \u2013 ostatecznie tutaj tak\u017ce implementacja nie jest optymalna pod k\u0105tem czasu wykonywania oraz zu\u017cycia pami\u0119ci, a mo\u017ce tak\u017ce prowadzi\u0107 do sporych narzut\u00f3w. W tym przypadku najcz\u0119\u015bciej tworzy si\u0119 implementacje sterownik\u00f3w bardzo mocno zoptymalizowanych pod \u015bci\u015ble okre\u015blone potrzeby projektowe. Implementacja jest mocno zale\u017cna od sprz\u0119tu (wykorzystuje maksymalnie feature\u2019y peryferi\u00f3w, utylizuje wszelkie mo\u017cliwo\u015bci jakie dostarcza uC, (np. DMA, przerwania). Taki sterownik jako niezgodny ze standardem ATUSOAR oczywi\u015bcie musimy umie\u015bci\u0107 w CDD. <\/li><\/ul><\/li><li>Wysoce wydajne rozwi\u0105zanie <ul><li>Punkt b\u0119d\u0105cy rozwini\u0119ciem dla zoptymalizowanych sterownik\u00f3w, ale skupiaj\u0105cy si\u0119 na bardziej abstrakcyjnych funkcjonalno\u015bciach. Przyk\u0142adem takiego rozwi\u0105zania mo\u017ce by\u0107 potrzeba stworzenia wysoce wydajnej obs\u0142ugi komunikacji mi\u0119dzy rdzeniami uC. <\/li><\/ul><\/li><li>Po\u015brednik dla modu\u0142u AUTOSAR <ul><li>agregator danych, kt\u00f3ry przekazuje zebrane informacje do modu\u0142u AUTOSAR, cz\u0119sto stosowany dla DEM (ze wzgl\u0119d\u00f3w wydajno\u015bciowych). <\/li><\/ul><\/li><li>Legacy code\/migracja na architektur\u0119 AUTOSAR <ul><li>Ze wzgl\u0119d\u00f3w biznesowych bardzo rzadko zdarza si\u0119, aby projekty automotive by\u0142y tworzone zupe\u0142nie od zera. Zazwyczaj rozwi\u0105zanie opiera si\u0119 o istniej\u0105cy produkt (skr\u00f3cony czas rozwoju nowego rozwi\u0105zania, dojrza\u0142e i przetestowane implementacje). Z tego te\u017c wzgl\u0119du migracja na architektur\u0119 AUTOSAR, tak aby projekt by\u0142 w 100% zgodny z nowym standardem nast\u0119puje etapowo. Przyj\u0119tym jest, aby w tym czasie kod legacy umieszcza\u0107 w\u0142a\u015bnie w obszarze Complex Device Drivers. Rozwi\u0105zanie to jest cz\u0119sto najprostszym, sposobem migracji. Kod nie AUTOSARowy niejako \u201enaturalnie\u201d pasuje w obszar CDD, nie musi by\u0107 zgodny z portami wymaganymi dla SW-C, ma bezpo\u015bredni dost\u0119p do sprz\u0119tu. Projekt mo\u017ce zachowa\u0107 pe\u0142n\u0105 funkcjonalno\u015b\u0107 z punktu widzenia sytemu. Z czasem mo\u017cna przeprowadza\u0107 migracj\u0119 na rozwi\u0105zanie w pe\u0142ni zgodne z AUTOSARem, przenosz\u0105c kolejno funkcjonalno\u015bci w odpowiadaj\u0105ce im obszary aplikacji lub BSW, zostawiaj\u0105c kod mocno specyficzny w obszarze CDD. <\/li><\/ul><\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.2. Czego nie implementowa\u0107 w CDD<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Application SW Component \u2013 jak wspomnieli\u015bmy wy\u017cej, warstwa aplikacji zawiera logik\u0119 systemu i powinna znajdowa\u0107 si\u0119 powy\u017cej RTE. Je\u015bli taki komponent umie\u015bcimy w BSW, utracimy elastyczno\u015b\u0107 jak\u0105 daje nam VFB \u2013 umieszczenia komponentu w dowolnym rdzeniu lub nawet osobnym ECU. Logika nie powinna by\u0107 zale\u017cna od sprz\u0119tu, z zasady BSW jest obszarem, gdzie znajduje si\u0119 kod maj\u0105cy zapewni\u0107 t\u0105 niezale\u017cno\u015b\u0107. Oczywi\u015bcie wyj\u0105tkow\u0105 sytuacj\u0105 jest integracja kodu legacy, kt\u00f3ry zamierzamy w przysz\u0142o\u015bci migrowa\u0107 do SW-C.<\/li><li>Parameter SW Component \u2013 komponent zawieraj\u0105cy parametry konfiguracyjne aplikacji, nie powinny zale\u017ce\u0107 od BSW. Taka parametryzacja znajduje si\u0119 wewn\u0105trz RTE, udost\u0119pnia jedynie porty wyj\u015bciowe.<\/li><li>ECU Abstraction Component \u2013 dostarcza sygna\u0142owy interfejs do sprz\u0119tu takiego jak: ADC, DIO, PWM. Je\u015bli potrzebujemy zaimplementowa\u0107 udost\u0119pnienie takich funkcjonalno\u015bci dla warstwy aplikacji, to powinni\u015bmy to umie\u015bci\u0107 w ECU Abstraction Component, a nie w CDD<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2.3. Dobre praktyki przy implementacji CDD<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Zachowanie warstwowo\u015bci zbli\u017conej organizacyjnie do standardu AUTSOAR: MCAL, ECUAL, Service Layer, itd.<\/li><li>Maksymalnie opieranie si\u0119 na istniej\u0105cych modu\u0142ach AUTOSAR BSW, tworzenie kodu w CDD jedynie w sytuacjach tego wymagaj\u0105cych<\/li><li>Unikanie rozwi\u0105za\u0144 opartych o wska\u017aniki w przypadku potrzeby komunikacji z warstw\u0105 aplikacji. Komunikacja taka zawsze musi przebiega\u0107 przez RTE, kt\u00f3re operuje na sygna\u0142ach (kt\u00f3re s\u0105 warto\u015bciami). Nale\u017cy wi\u0119c oprze\u0107 si\u0119 o struktury i tablice.<\/li><li>Je\u015bli jest taka mo\u017cliwo\u015b\u0107, korzysta\u0107 z komunikacji poprzez RTE, a nie bezpo\u015bredniego wywo\u0142ywania interfejs\u00f3w modu\u0142u \u2013 to rozwi\u0105zanie jest bardziej elastycznie pod k\u0105tem przenaszalno\u015bci. Takie po\u0142\u0105czenie jest automatycznie generowane z poziomu architektury projektu (arxml).<\/li><li>Przy tworzeniu CDD korzysta\u0107 z AUTOSAR_EXP_CDDDesignAndIntegrationGuideline.pdf<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">3. Podsumowanie<\/h2>\n\n\n\n<p>Dzi\u0119ki istnieniu obszaru CDD w architekturze AUTOSAR mo\u017cemy w systemie umie\u015bci\u0107 kod odpowiedzialny za obs\u0142ug\u0119 urz\u0105dze\u0144 lub peryferii nieprzewidzianych podczas opracowywania standardu, implementowa\u0107 bardzo specyficzne lub mocno optymalizowane rozwi\u0105zania. CDD u\u0142atwia tak\u017ce migracj\u0119 projekt\u00f3w do standardu AUTOSAR.<\/p>\n\n\n\n<p>Warto rozumie\u0107 do czego s\u0142u\u017cy obszar CDD, wykorzystuj\u0105c go \u015bwiadomie i w zgodzie z przyj\u0119t\u0105 praktyk\u0105.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;8534&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;20&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5 ( votes: 20)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;AUTOSAR CDD \u2013 \u201edo\u2019s\u201d, \u201edon\u2019ts\u201d and best practices&quot;,&quot;width&quot;:&quot;139.5&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 139.5px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            5\/5 ( votes: 20)    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Powsta\u0142e w 2003 roku konsorcjum AUTOSAR (AUTomotive Open System ARchitecture) postawi\u0142o sobie za g\u0142\u00f3wny cel zestandaryzowanie architektury oprogramowania dla bran\u017cy &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/autosar-cdd-dos-donts-and-best-practices\/\">Continued<\/a><\/p>\n","protected":false},"author":230,"featured_media":8551,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":7,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[563,864,825],"class_list":["post-8534","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-embedded","tag-autosar","tag-dobre-praktyki"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2019\/11\/autosar-1.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/8534"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/230"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=8534"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/8534\/revisions"}],"predecessor-version":[{"id":20616,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/8534\/revisions\/20616"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/8551"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=8534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=8534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=8534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}