Pi'ye prototip yapmak ve mikrodenetleyici kullanmak arasında büyük bir sıçrama var mı?


25

Bu soru , diğer şeylerin yanı sıra, bir son noktayı prototiplemek için bir Ahududu Pi üzerinde Python kullanmak ile bir mikrodenetleyici kullanmak arasında büyük bir öğrenme eğrisi olup olmadığını sorar.

Açıkçası, güç tüketiminde büyük bir iyileşme olduğu (düşük işlem hacmine bağlı olarak), pille çalışan bir ürün için MCU yaklaşımını kullanmak için iyi nedenler var.

Linux çalıştıran tek kartlı bir bilgisayara yapışmanın olası nedenlerinden biri, uygulamanın yüksek seviyede bir dilde yazılabileceği varsayılarak, öğrenilecek yeni bir yazılım (python veya benzeri) bulunmamasıdır (burada bol miktarda standart olmalıdır) kütüphaneler).

Gömülü bir geliştirme platformunda olası seçenekler C ++ (mbed veya arduino) veya micropython'dur. Benim izlenimim, bunların Linux altında çalıştırılacak kod yazmaktan önemli ölçüde farklı veya daha karmaşık olmadıklarıdır - platformların bireysel avantajları olsa da. Bir yazılım geliştiricisiyle ilgili olan hiçbir şeyi özledim mi?

Özellikle, IoT uç noktalarından söz ediyorum - bu yüzden burada ilgilendiğim uygulamalar için bir Linux sisteminin tüm kaynaklarına sahip olmak şart değil. Ayrıca güç ve gecikme hususlarının mcu uygulamasını bu tür uygulamalarda zor bir gereklilik haline getirdiğini vurgulamakta fayda vardır.

Yanıtlar:


12

George'un kapsamlı cevabını ve 2. maddesinin donanım desteğini eklemek İstenilen donanım (örn. Ethernet, WiFi, SD kart) mikrodenetleyiciye / Arduino'ya kalkanlar veya benzer uzatma panoları ile eklense bile, onları çalıştırmak için kütüphaneler küçük hafızayı oldukça zorlamaktadır (yani ATMEGA328 (tipik bir Arduino kontrolörü)) 32Kb FLASH ve 2Kb RAM vardır). Özellikle birden fazla özelliği birleştirirken (ağ, ekran, SD kart) bu ciddi bir sınırlama olabilir.

Arduino dünyasından birkaç örnek:

Bir SD kart ve basit bir dosya sistemini (FAT) desteklemek:

  • SD kartlar (kod boyutu bilinmiyor, ancak donanım SPI'si kullanılıyorsa büyük sorun değil), en az 512 bayt RAM tamponu
  • Petit FAT FS , ~ 2..4 kB FLASH ve ~ 44 bayt RAM gerektirir

Bir matris ekranı kullanarak:

TCP / IP protokol yığını ile Ethernet:

  • uIP : Tipik bir paket büyüklüğü aralığındaki RAM gereksinimleri (> 1 kB) olsa da, tek yongalı Ethernet denetleyicileri genellikle birkaç maksimum boyutta Ethernet karesi tutabilen yonga tamponu ile birlikte gelir.

    UIP uygulamasını 200 bayt kadar az RAM ile çalıştırmak mümkündür, ancak böyle bir konfigürasyon son derece düşük verim sağlayacak ve sadece az sayıda eşzamanlı bağlantıya izin verecektir. ( Kaynak. )

  • Arduino için TCP ve UDP protokolleriyle IP yığını : en az 128 kB harici bellek

  • Seri arabirim üzerinden IP: SeriIP ~ 9 kB FLASH ve "yeterli" RAM

Sonuç olarak, bu sınırlamalarla programlama oldukça farklı bir yaklaşım gerektirir ve program alanı ve kod boyutu (FLASH), çalışma zamanı verileri (RAM) ve yürütme hızı açısından optimizasyon gerektirir. Bu cevap güzelce parladı.

Soru özellikle mbed platformundan bahsettiğinde, tabii ki, şifreleme, kimlik doğrulama ve yetkilendirme ile birlikte bağlantı, yani IoT ile en alakalı özellikleri içermesi dikkat çekicidir. Sözde, Düşük Güçlü Kablosuz Kişisel Alan Ağı üzerinden Bluetooth Düşük Enerji ve IPv6 donanım desteği sunuyor. Bu bağlantı özellikleri yalnızca listelenen geliştirme panolarında yalnızca > = 128 kB FLASH ve> = 16 kB RAM ile kullanılabilir. Diğer yandan küçük kartlar, 16KB Flash, 4KB RAM (yani orta büyüklükteki Arduino'lardan daha fazlası değil) gibi küçük mikrodenetleyicilere sahip sistemleri adanmış bağlanabilirlik içermiyor.


Kaynak kısıtlamaları varsayımlarımdaki en büyük boşluktu - çoğu insanın bu sorunlar olmadan geliştiğini unutmak kolaydı.
Sean Houlihane

20

Ne yapmaya çalıştığınıza bağlı.

  1. En büyük boşluk, bahsettiğiniz bir mikrodenetleyicinin (Arduino gibi) Linux gibi çok görevli bir işletim sistemi çalıştırmamasıdır. Bunun anlamı, uygulamanızın çoklu çalışmaya veya çoklu kullanımlara bağlı olması durumunda, Arduino'da çalışması çok daha zor veya imkansız olabilir.

  2. İkinci boşluk donanım desteğidir. Örneğin, Raspberry Pi kameraları, USB ses, ethernet, WiFi kutusundan destekliyor. Bunların hiçbiri doğrudan Arduino tarafından desteklenmiyor ve çeşitli kalkanları (USB Host, Ethernet veya WiFi gibi) kullanabiliyorsanız, bunları kullanmak Raspberry Pi'de ağ kullanımı kadar kolay değil.

  3. Üçüncü boşluk mevcut kaynaklardır. Çoğu mikrodenetleyici, Raspberry Pi'nin sunduğu kaynaklara bile yaklaşmıyor. Örneğin, ilk Raspberry Pi bile, 700MHz'de 256Mb RAM ile çalışan ve 32Gb depolama alanıyla kullanılabilen bir işlemci sundu. ATMEGA328 tabanlı tipik bir Arduino Uno, 16MHz'de çalışıyor ve 32Kb depolama ve 2Kb RAM'e sahip.

Dolayısıyla Raspberry Pi'yi kullanmak PC'den gelen geliştiriciler için kesinlikle çok daha kolay. Mikrodenetleyici kullanmanın temel avantajları:

  • masraflar (bir Çinli Arduino Nano klonu, nakliye bedeli olan 2 dolardan daha azdır)
  • güç tüketimi (mikrodenetleyiciler düşük güç tüketimi için gerçekten iyi bir şekilde optimize edilebilir - pillerle çalışmanız gerekiyorsa önemlidir);
  • gerçek zamanlı kullanılabilirlik, yani gerçek zamanlı olarak sinyal değişimine tepki verme yeteneği;
  • size (Arduino Mini, Ahududu Pi Zero'dan iki kat daha dardır ve bu kadar pime ihtiyacınız yoksa, ATTINY85 boyutu bir kuruştan daha azdır ve kristal olmadan çalışır).

Bunların hiçbiri önemli değilse, Ahududu Pi'yi kullanmak kesinlikle daha mantıklıdır.


3
Pil gücü ve büyük kaynak gereksinimi olmayan bir mcu kullanma için sürücüler - bu yüzden 10-100 MHz işlemcinin yeterli olduğunu farz ediyorum. SPI muhtemelen USB mcu eşdeğeri olmasına rağmen, çevre birimlerinin kullanılmasında geçerli olan nokta.
Sean Houlihane,

2
Sadece bir otobüse sahip olmak yeterli değil. Linux'ta WiFi kullanmayı düşünün, uygulamanız hakkında özel bir bilgiye ihtiyaç duymaz, Ethernet ile çalışan aynı kod WiFi arayüzü ile çalışacaktır. Mikrodenetleyicilerde durum böyle değil, farklı kütüphaneler kullanmanız, nasıl kullanmanız gerektiğini öğrenmeniz ve kodu değiştirmeniz gerekecek.
George Y.

1
Tamam, farklı bir kütüphane kullanmanın çok büyük bir engel olacağının farkında değildi.
Sean Houlihane

2
Çok fazla iğneye ihtiyacınız yoksa, pirinç taneleri boyutunda bir ATtiny4 alabilirsiniz: P
Nick T

1
görünüşe göre Attiny85'ten çok daha küçük değil :) ama haklısın, eğer DIP olmayan düşünürsek, 85 bile bir parmak ucu.
George Y.

9

EVET, Python'da programlamadan mikro denetleyicideki tipik C tabanlı dil araçlarını kullanarak programlamaya büyük bir sıçrama. Aslında, çoğu durumda uygulamanızın bir kısmını hepsi olmasa da, meclis dilinde yazmanız gerekebilir.

Diğer cevaplarda da belirtildiği gibi, mikro denetleyiciler kaynak bakımından çok kısıtlıdır ve bu nedenle bir Linux işletim sisteminin tüm kolaylıklarını ve yerel olarak çalıştırabileceğiniz tüm araçları kaybedersiniz. Arduino IDE ile yineleme, yerel komut dosyalarına kıyasla çok yavaştır.

Mikrodenetleyiciler ve mikroişlemcilerle ilgili çok fazla mesleki deneyimim olsa da, kişisel projelerimi gerçek zamanlı kritik şeyler için bazı Arduinos'lu RPi donanımı kullanarak yürütmeyi tercih ediyorum. Ayrıca Beagle Bone Black ile uğraşıyorum ve bazı yönlerden bir veya daha fazla Arduino ile RPI kullanmaktan daha uygun.


9

Evet, büyük fark

Aradaki fark, hem donanım hem de yazılım açısından gündüz ve gece gibidir. Hiçbir geçerli karşılaştırma yok.

Hangisini ne zaman kullanmalı

Bir Arduino kullanın, eğer ...

  • Yer kısıtlamaları bir Pi'yi olanaksız kılar.
  • Pi'nin güç kullanımı çok fazla olurdu.
  • Para bir meseledir (özellikle projenizde bir veya daha fazla bireysel denetleyiciye ihtiyacınız varsa, her biri yalnızca çok basit bir mantık sergiler).
  • Nitty ve gritty almak ve eğlence ya da bilgi edinmek için çok daha düşük bir seviyede çalışmak istersiniz.
  • Aşırı basitliğe ve / veya% 100 tanımlı gerçek zamanlı davranışa ve kontrolden çıkmayan bir şeyin programınızı öldürmesi olasılığını sıfırlamanız gerekir.
  • Ethernet, zor USB ana bilgisayar işlevselliğine (yani, sabit sürücülere erişme; istemci tarafında, örneğin HID cihazı olarak kullanmak tamamdır) ihtiyacınız yoktur. Bunların çoğu, bir Arduino'ya (verrry, dikey olarak) takılabilir, ancak RAM / EPROM ve ayrıca işlevsellik açısından yüksek bir maliyetle takılabilir. Önleyici çoklu görev olmadığından blokaj kaldırma görevleri çok hızlı bir şekilde karmaşıklaşır.
  • Basit Arduino geliştirme IDE'sinde veya daha derine kazma (örn. Programları kendiniz oluşturma) konusunda sorun yok ve - Pro Micro gibi bir USB yükleme cihazına gitmiyorsanız - satın alınmış veya kendinize ait bir geliştirme seti /brülör.

Diğer tüm durumlarda, bir Pi oldukça kullanıcı dostu. Pi basit bir başka (yavaş) bilgisayardır.

Beni yanlış anlama. Bir Pi sahibiyim ve onu ağımdaki birçok Linux servisi için kullanıyorum. Ayrıca Arduinos'u sık sık programlarım (çoğunlukla Pro Micros). İkisi de harika, ben de onları sevdim ama çok farklı kullanım senaryoları var.

Zorluk ile ilgili sorunuza - görecelidir. Arduino'nun benim için zorlaştığı tek zaman, özellikle şüpheli elektronik cihazlarla (eğer EM parazitleri, çok uzun kablolar vb. İle birleştirildiyse) zamanlama hatalarını ayıklamak zordu. Seçtiğiniz dilde katıysanız (yani, Arduino IDE için C), kullanmakta olduğunuz kütüphaneleri hackleyebilmelisiniz. Yine de, zamanlama açısından kritik olmayan şeyler için örneğin seçtiğiniz bir betik dilini kullanabileceğiniz bir Pi'den sonra her zaman daha karmaşık olacaktır; bunlar geliştirmek ve hata ayıklamak her zaman daha kolay olacaktır.


Hangisinin en iyi geliştirme platformu olduğunu sormuyorum - kullanım durumum öncelikle güç kısıtlamaları nedeniyle bir mcu gerektiriyor . Sorunun bu noktada çok net olmadığını görüyorum.
Sean Houlihane

Tamam, o zaman cevabın ilk kısmı yeterli olacaktır. İsterseniz geri kalanın "ek" olarak kalmasına izin vereceğim.
AnoE

7

Henüz açıkça belirtilmemiş birkaç nokta olduğuna inanıyorum.

Geliştirme ortamı tamamen farklı. Pi yazılımını Pi'de geliştirebilirsiniz - isterseniz bir GUI bile kullanabilirsiniz. Herhangi bir bilgisayar sistemi için mevcut olan çok fazla hata ayıklama aracı da vardır; bunlar da oldukça fazladır.

Denetleyicilerin ayrı bir bilgisayarda geliştirilmesi / taklit edilmesi gerekecek ve daha sonra son test için denetleyiciye gönderilecektir.

Pi, programlamak istediğiniz hemen hemen her dili çalıştırabilir, mikro denetleyicilerde genellikle bir veya iki tane bulunur.

Pi, birkaç işletim sistemi çalıştırabilir (Windows IoT ve bir dizi özel sistem dahil), yerleşik denetleyiciler hiç bir şekilde "İşletim Sistemi" çalıştırmazlar.

Ayrıca çalışma zamanı / işletim sistemi gittiği sürece - Pi'nin başlatılması birkaç saniye sürer - aslında ilk birkaç saniyede bir şeyler yapmak istiyorsanız, o zaman pi sizin için çalışmayacaktır. Ayrıca, herhangi bir depolamaya herhangi bir yazı yazmamak için bazı aşırı önlemlere girmediyseniz, gerçekten sadece gücü kesmemelisiniz, bir "Kapatma" yapmanız ve biraz beklemeniz gerekir. Bu aynı zamanda bazı kullanımları sınırlayabilir.

Daha önce bahsetmediğim bir başka konuşlandırma sonrası nokta. Bir Pi'yi düzgün bir şekilde güvenceye aldığımdan nasıl emin olacağımdan emin değilim - hiçbir ajansın belirli şartlar altında yetkisiz erişime izin veren herhangi bir yere küçük bir kod parçası koymadığını - tüm ağları kaldırmadan ve tüm kablosuz erişim mekanizmalarını devre dışı bırakmadan . Mikro denetleyicileri güvenli bir şekilde kullanmak kolaydır, çünkü neredeyse üzerinde çalışan tüm kodları yazıyorsunuzdur.

Tabii ki, her zaman gerçek bir işletim sistemi olmadan kendi Pi imajınızı geliştirebilir ve tüm kartı / CPU'yu devralabilirsiniz, bu da onu tüm ilgili avantajlar / dezavantajlarla hella-güçlü / pahalı bir mikro kontrolör haline getirir. Birisi muhtemelen bunu çoktan yapmıştır bile ama son zamanlarda böyle bir şey aramadım.


Son paragrafınızı WRT, evet, buna çıplak metal denir ve bunu birkaç kişi yapar, ancak teknik olarak mümkündür ... siteye hoş geldiniz!
Ghanima

3

Bir Pi ile bir uygulama geliştirmek arasındaki fark, donanım geliştirme ve yazılım geliştirme araç zinciri farkları nedeniyle bir mikrodenetleyici ile bir uygulama geliştirmeye çok farklı veya biraz benzer olabilir.

Her yerde 8 bit ila 64 bit işlemciye sahip olan ve birkaç K RAM'den birkaç gigabayt RAM'e sahip geniş bir mikrodenetleyici yelpazesi vardır. Daha yetenekli mikro denetleyiciler daha Pi benzeri bir deneyim sunar. Daha az yetenekli mikrodenetleyiciler yoktur.

Pi ile bile, Windows 10 IoT işletim sistemi için geliştirme ile Raspian, Mate veya diğer Linux tabanlı işletim sistemleri için geliştirme arasında büyük farklar vardır. Windows 10 IoT, Evrensel Windows Programı (UWP) ortamını hedef alan uzaktan hata ayıklayıcılı bir Visual Studio araç zincirini kullanan bir geliştirme bilgisayarı gerektirir. Raspian veya Mate için geliştirme, Pi'de bulunan araçlarla Pi'de yapılabilir.

Kısıtlı Uygulama Protokolü küçük, kısıtlı cihazlar şeyler çevrenin internet ile kullanılıyor kullanılır. Mikrodenetleyici donanım ve yazılım çeşitliliği hakkında bir fikir edinmek için CoAP protokolü uygulamasındaki bu sayfa hedeflediği ortam hakkında bir fikir vermektedir. İOS , OSX ve Android gibi daha iyi bilinen işletim sistemleri ile birlikte belirsizce duyduğum Contiki işletim sisteminden bahsediyor . Bahsedilen programlama dilleri Java, JavaScript, C, C #, Ruby, Go, Erlang, Rust ve Python'dur.

Mikrodenetleyici ile geliştirme için kullanılan alet zinciri, üreticiye ve geliştirme topluluklarından ve açık kaynak girişimlerinden ne tür kaynakların mevcut olduğuna bağlı olarak değişir. Bazı durumlarda bir çapraz montajcı, bazı durumlarda bir C çapraz derleyici, diğer durumlarda ise tüm çan ve ıslık ve öykünücüler ile Windows 10 IoT için Visual Studio araç zincirine benzeyen hoş bir takım zinciri elde edersiniz.

Bir mikrodenetleyici için gerçek geliştirme ortamı, yeni bir görüntü oluşturmak ve cihaza itmek için bir EEPROM programcısı ve yazılım araçlarını kullanmayı içerebilir veya cihaz, yeni bir görüntünün seri bağlantı üzerinden veya üzerinden indirilmesine izin vermek için gerekli bağlantıya sahip olabilir. bir ağ bağlantısı

Benim izlenimim, çoğu mikrodenetleyicinin bir C çapraz derleyicisine sahip olmasıdır, ancak derleyici sadece K&R veya belki de C98 gibi daha eski standartları destekleyebilir. Mikroişlemci özgü örneğin özellikleri C çapraz derleyiciler genellikle standart dışı anahtar kelimeler var farve nearonların parçalı bellek ile eski 8080 ve 8086 işlemcileri ile işaretçileri için anahtar kelimeler.

FORTH programlama dili gibi mikrodenetleyicileri hedef alan özel diller de vardır . Bu diller genellikle çıplak metali hedefleyen çalışma süresi tasarımına sahiptir, böylece dil çalışma süresinden başka bir işletim sistemi yoktur.

İşletim sistemi, pratik olarak varolmayanlardan, çıplak kemiklerden Linux'a, freeRTOS veya Windows Embedded veya tamamen gelişmiş bir Linux veya Microsoft Windows gibi özel bir işletim sistemine kadar değişebilir . Bu SourceForge projesine bakın, Ahududu Pi için MINIBIAN . Ayrıca bu e-Kitap, Baking Pi: assembler içindeki Raspberry Pi için temel işletim sisteminin geliştirilmesini tanımlayan İşletim Sistemleri Geliştirme bölümüne bakınız .

Nesnelerin İnterneti'ni Visual Studio ile Programlayan Visual Studio Magazine'in bu makalesi, mevcut birçok farklı cihaza genel bir bakış ve ardından Linux ve Windows için geliştirme için Visual Studio IDE kullanımına genel bir bakış sunmaktadır.

Artık kullanıma hazır, programlanabilir, ağa bağlanabilir mikrodenetleyici aygıtların büyük ve büyüyen bir evreni var. Çok düşük seviyede, Texas Instruments gibi çeşitli geleneksel yonga üreticilerinin kullandığı çeşitli 16 ve 32 bitlik cihazlara sahipsiniz. (SensorTag geliştirme seti ile biraz oynadım ve çok eğlenceli, Watch DevPack'in de harika bir öğrenme aracı olabileceğini düşünmemi sağladı.)

Bazı daha iyi bilinen mikrodenetleyici aygıtlar arasında Arduino, BeagleBoard ve Raspberry Pi bulunur. Bu ortamların tümü geniş bir topluluk desteğine sahiptir ve çok sayıda hazır dış sensör, motor, servo ve hayal edebileceğiniz başka bir şeyi takmaya hazırdır. Limor "Ladyada" Fried tarafından kurulan elektronik öğrenme mağazasında yer alan Adafruit, bu hafif ve hafif tüy üretim panelleri serisinin yanı sıra bu kartlar için her türlü çevre birimini sağlıyor.

...

Microsoft .NET Framework ve Visual Studio'ya aşina olan geliştiriciler için en ilginç cihaz evreni, Windows 10 IoT Core uyumlu ortamlar olabilir. Bunlar, C #, Visual Basic, Python ve Node.js / JavaScript dahil olmak üzere çeşitli dillerde yazılmış Evrensel Windows Platformu (UWP) uygulamalarını destekleyen x86 ve ARM destekli cihazlardır. Windows 10 IoT çekirdeği, Raspberry Pi, Arrow DragonBoard 410C, Intel Joule ve Compute Stick ve MinnowBoard gibi aygıtları destekler. Giyilebilir Askey TurboMate E1 gibi ilginç ürün platformları da var.

Bir Mikrodenetleyici Uygulamasına Özel Bir Örnek

Bu, otomatik bir kahve makinesinden gelen bir mikrodenetleyici panosunun görüntüsüdür. Bu, Çin'de üretilen otomatik kahve makineleri için standart bir bileşen gibi görünüyor. Üreticinin web sitesi PCB üzerine basılmıştır.

Görüntü iki görünümden oluşur. Soldaki görünüm, mikrodenetleyiciyi ve destek devresini içeren panelin arkasıdır. Sağdaki görünüm, LCD ekranlı ve geçerli saati ayarlamak ve bir başlangıç ​​zamanını programlamak gibi eylemleri gerçekleştirmek için kullanılan bir dizi düğmeyle panelin önüdür.

Sağdaki görünüm, bir taşıyıcıya, daha sonra kahve makinesinin önündeki bir açıklığa sığar. Alt PCB üzerindeki şalterler, döner kol şalterleriyle çalıştırılır. Özel amaçlı görünen LCD, geçerli saati ve durumu göstermek ve aynı zamanda kahve makinesinin ayarlarını değiştirirken kullanıcı arayüzünü görüntülemek için kullanılır. Kırmızı LED kahve makinesinin ne zaman kahve yaptığını göstermek ve aydınlatmayı geri çevirerek ne zaman yapıldığını göstermek için kullanılır.

görüntü tanımını buraya girin

Mikrodenetleyici, 8 bitlik bir mikrodenetleyici olan bir ELAN Microelectronics Corp EM78P447NAM'dir (veri sayfası) . Temel istatistiklerden bazıları, bunun ne kadar küçük ve az bir cihaz olduğunu, ancak amaçlanan amaç için iyi çalıştığını göstermektedir. Amaç, imalatın bir parçası olarak ROM'a bir kez yazmaya indirilen bir yazılım geliştirmektir.

• Düşük güç tüketimi:

* Less then 2.2 mA at 5V/4MHz

* Typically 35 µA, at 3V/32KHz

* Typically 2 µA, during sleep mode

• chip ROM'da 4K × 13 bit

• OTP hafıza kodlarının girmesini önleyen üç koruma bit

• Kullanıcı gereksinimlerini karşılamak için bir yapılandırma kaydı

• Talaş kayıtlarında 148 × 8 bit (SRAM, genel amaçlı kayıt)


2
Bunun soruyu ele aldığını sanmıyorum. Elbette, bazı ürünler iyi paketlenmedi, ancak bu SBC için de geçerli.
Sean Houlihane

1
@SeanHoulihane bu cevap ile yapmaya çalıştığım, özellikle mikrodenetleyici etiketini karşılayan geniş bir cihaz yelpazesi olduğu sorusu üzerine bir mikrodenetleyici bakış açısı sağlamak. İşletim sistemi peyzajında ​​Linux'tan daha fazlası var, programlama dili ise python veya C'den daha fazla.
Richard Chambers

1
Bana göre sadece MCU dünyasının bir karmaşa olduğunu söylüyorsunuz. Hangi hissediyorum yanıltıcıdır.
Sean Houlihane

1
@SeanHoulihane Görevimden aldığın izlenim, MCU dünyasının bir karmaşa olduğu için üzgünüm. Bir başka yorum ise, MCU dünyasının birçok harika alternatif ve fırsattan biri olduğu, ancak okuyucunun herhangi bir anlatıya kendi önyargılarını ve önyargılarını getirdiğidir.
Richard Chambers
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.