STM32F4 và HAL


23

Vì vậy, tôi đã thử nghiệm STM32F407 một thời gian (tôi mới sử dụng ARM) và quyết định viết một ứng dụng đơn giản bằng thư viện HAL vì có vẻ như ST đã ngừng Thư viện ngoại vi tiêu chuẩn. Vì vậy, câu hỏi của tôi là, điểm trong HAL là gì? Không phải StdPeriph đang làm công việc của mình sao? Tại sao họ lại ngừng sử dụng nó cho HAL? Đối với tôi có vẻ như HAL là một mớ hỗn độn.

Tài liệu này TUYỆT VỜI, ít nhất là đối với StdPeriph, có một tài liệu tham khảo đầy đủ được tổ chức đủ tốt để dễ dàng tìm thấy những gì bạn muốn ( http://stm32.kosyak.info/doc/ ). Đối với HAL, có một tệp PDF nhảm nhí ( http://www.st.com/st-web-ui/static/active/jp/resource/technical/document/user_manual/DM00105879.pdf ) có cấu trúc dường như ngẫu nhiên. Đọc bất kỳ phần nào, ví dụ liên quan đến thiết bị ngoại vi, tôi dường như không thể hiểu các yêu cầu để định cấu hình và tùy chỉnh nó đúng cách. Nó trông giống như ghi chú cá nhân từ một người không muốn quên đồ, hơn là một tài liệu tham khảo.

Tôi biết tôi có thể sử dụng CubeMX để khởi tạo GPIO và định cấu hình các thiết bị ngoại vi, nhưng mục đích của tôi là tự mình làm để tôi hiểu rõ hơn hoạt động của họ, không phải là một phần mềm làm tất cả cho tôi. Tôi có làm điều gì sai? Có phải đó là người mới ARM trong tôi làm tôi bối rối? Hoặc là tài liệu có sẵn THAT xấu?


Một cái gì đó như ChibiOS oerinois phù hợp với bạn hơn? Họ có RTOS nhưng cũng là một HAL rất tốt mà bạn có thể sử dụng mà không cần RTOS.
IgorEE

ST đã không chính xác ngừng các Thư viện ngoại vi tiêu chuẩn, nhưng họ sẽ không phát hành các phiên bản mới của nó cho các gia đình mới hơn. Họ đã tuyên bố (ở đâu đó trên diễn đàn của họ nhưng tôi dường như không thể tìm thấy nó) rằng họ sẽ tiếp tục hỗ trợ SPL cho các gia đình mà nó đã được phát hành (bao gồm STM32F4). Vì bạn chưa quen với ARM, có lẽ tốt nhất nên đi với HAL. Tôi có rất nhiều mô-đun đã được viết bằng SPL vì vậy quá trình chuyển đổi sẽ là một nỗi đau và tôi đã bỏ nó đi. Điều này thật tệ vì một khi tôi quyết định sử dụng một gia đình mới, sẽ có thêm mã để chuyển sang HAL
Tut

Ebook này: leanpub.com/mastering-stm32 là một giới thiệu tốt cho người mới (nhưng cũng chuyên nghiệp) cho thế giới STM32.
Lorenzo Melato

Câu trả lời:


13

Tạo thư viện của riêng bạn khá đơn giản. Tài liệu thông số kỹ thuật đăng ký của họ là khá tốt, hầu hết nếu không phải tất cả các thiết bị ngoại vi đều dễ cài đặt. Tôi thấy đau đớn hơn nhiều khi sử dụng thư viện của họ. nhưng có lẽ đó chỉ là tôi Điều này đúng với st, nxp, ti, atmel để đặt tên cho một số ít (không quá nhiều cho intel và microchip).

Tại sao họ thay đổi thư viện, có thể là bất kỳ lý do nào, một số ông chủ mới tiếp quản, một số bộ phận đã đóng cửa một bộ phận khác tiếp quản. Tiếp thị muốn một hình ảnh mới cho sản phẩm. Như ElectronS đã đề cập, có thể là một nỗ lực trừu tượng hóa phần cứng nhiều hơn để thu hút người dùng không sẵn sàng hoặc không thể làm kim loại trần. Tôi sẽ đi xa hơn về điều đó và nói rằng có lẽ họ đang cố gắng cạnh tranh với hiện tượng Arduino. Mà mbed và mọi người khác đã luôn cố gắng làm và thất bại (ngay cả trước Arduino).

Trong mọi trường hợp, càng xa phần cứng, nó càng trở nên cồng kềnh và chậm hơn, do đó bạn càng phải chi tiêu cho mỗi đơn vị cho rom, ram và mhz. Chỉ để bạn có thể dành cùng một lượng thời gian lập trình? Chỉ làm khác đi?

Bạn nói rằng bạn đến từ thế giới PIC, bây giờ họ đã làm rất tốt với các công cụ, tài liệu chip của họ rất khủng khiếp, một số điều tồi tệ nhất. họ đã bù đắp với các thư viện và hộp cát.

Vào cuối ngày, hãy thử các tùy chọn khác nhau, thử các sản phẩm cạnh tranh để xem các công cụ của chúng so sánh như thế nào. Rất nhiều thứ bạn có thể làm miễn phí chỉ để xem nó có hợp lý không và bạn có thể biên dịch công cụ. Thậm chí có thể sử dụng một bộ mô phỏng hướng dẫn. Tìm một trong những phù hợp với bạn.

Lưu ý, tùy chọn không có thư viện đóng hộp là LUÔN LUÔN có sẵn cho bạn. Bạn không bị giới hạn về loại công cụ nào bạn có thể sử dụng, hệ điều hành máy chủ nào, ide, trình soạn thảo, v.v. Họ có thể gắn bó với bạn khi lập trình các bộ phận, nếu các tùy chọn của họ cực kỳ hạn chế trong việc chuyển sang một số chip khác hoặc nhà cung cấp nếu bạn có thể.

Để bán một sản phẩm chip như thế này, họ phải cung cấp một môi trường phát triển cho dù đó là tất cả của họ hay những thứ miễn phí mà họ dán lại với nhau. Và họ có xu hướng đặt một thư viện của một số loại với nhau. Nó chỉ phải trông đủ tốt và nháy mắt ví dụ led hoạt động vừa đủ để quản lý hoặc nhóm phần cứng của bạn thiết kế sản phẩm của họ, sau đó khi sản phẩm bảng của bạn bị ném vào tường thành phần mềm, là khi đau không hoặc không đến Nếu nó gần như hoạt động nhưng không hoàn toàn là một chiến thắng lớn cho nhà cung cấp chip vì bây giờ bạn sẽ trả tiền cho hỗ trợ công nghệ cho chút ít đó. Vì vậy, đó là lợi ích tốt nhất của họ gần như ở đó nhưng không hoàn toàn.

Các nhà cung cấp chip chỉ cần nhìn đủ tốt để có được thiết kế giành chiến thắng. Họ phải tiếp tục cải thiện (? Thay đổi) sản phẩm để thu hút khách hàng mới và cũ. Vì vậy, họ sẽ làm quá mức, cách nhau bao xa và có bao nhiêu thư viện trước đó tiếp tục hỗ trợ, khác nhau. Vì vậy, bất cứ thư viện nào bạn quen dần dần cũng sẽ biến mất. Vì vậy, hãy học cách thích nghi (hoặc không sử dụng công cụ của họ và tự đi, thứ mà bạn có thể hỗ trợ vô thời hạn). Được cấp, lý tưởng nhất, bạn chỉ cần phát triển ứng dụng một lần cho mỗi sản phẩm, làm cho phần sụn của bạn hoàn hảo (chúc may mắn nếu sử dụng thư viện của bên thứ ba) và bạn không cần quay lại và tìm một máy tính sẽ tải chuỗi công cụ của họ nếu bạn có thể tìm thấy sao chép nó, và nhớ cách sử dụng thư viện cũ đó. Hãy nhớ rằng bạn không chỉ nên lưu mã nguồn của mình mà còn nên lưu tất cả các công cụ và tài liệu của họ.

Các thư viện của họ chỉ được hỗ trợ trên thường là một chuỗi công cụ, dưới một có thể là hai IDE và đôi khi chỉ trên Windows và một số phiên bản nhất định. Một lần nữa, bạn không có bất kỳ hạn chế nào, chắc chắn không phải là ARM, nếu bạn làm theo ý mình. Bạn luôn có thể đọc bất kỳ / tất cả các thư viện của họ để xem cách họ làm việc. Nhưng điều đó thường rất đáng sợ, họ không sử dụng các nhà phát triển nhóm A của họ cho các thư viện, tôi đã trích xuất một vài dòng mã để hỏi các ứng viên phỏng vấn có gì sai với mã này.

để tiết kiệm thời gian và công sức cả về phía silicon và phía phần mềm, họ thường tái chế cùng một ip, vì vậy một khi bạn thấy cách thiết bị ngoại vi hoạt động trên một trong các chip của họ, nó thường hoạt động tương tự trên nhiều chip khác của họ. Có, các hệ thống đồng hồ có thể khó khăn có hoặc không có thư viện của họ. Cơ hội cao để gạch chip, đó là nơi mà hầu hết các gạch chip / bảng của tôi đã xảy ra. Giúp hiểu cách thức hoạt động của chip của họ, ví dụ như của AVR, hầu hết nếu không phải là tất cả, có thể được lập trình lại trong khi chip được đặt lại, do đó, bất kỳ mã xấu nào làm rối các chân cần thiết để lập trình lại hoặc treo logic cần thiết để lập trình lại, không vấn đề là bạn có thể lập trình lại những con chip đó Một số nhà cung cấp này (st là một) có bộ tải khởi động bên trong mà bạn có thể chọn bằng cách sử dụng dây đeo (ví dụ BOOT0 trong thế giới thứ nhất),

Một kích thước phù hợp với tất cả phù hợp với không ai tốt. Đặc biệt đúng với phần mềm. Vì vậy, bất kỳ nỗ lực để trừu tượng hóa phần cứng, chỉ làm cho nó chậm và cồng kềnh. Cũng có thể có được một con chip lớn hơn và chạy linux trên nó, nếu đó là những gì bạn thực sự theo đuổi. Rất nhiều điều này là kết quả của các nhà phát triển, mặc dù không muốn làm bẩn tay họ, vì vậy chúng tôi đã yêu cầu điều này và họ đang cố gắng cung cấp nó.

Một lần nữa, đừng tự nhốt mình vào st hoặc bất kỳ nhà cung cấp nào (trừ khi quá muộn và ban quản lý và hoặc nhóm phần cứng đã gắn bó với bạn, lưu ý rằng các sản phẩm stm32 rất hay và dễ sử dụng). Cửa hàng xung quanh. TI đang bỏ rất nhiều trứng vào giỏ cortex-m4. Bạn có thể thực hiện các thao tác trên một số sản phẩm cánh tay này cũng như các giải pháp được nhà cung cấp hỗ trợ.

Một điều bạn luôn có thể dựa vào, đó là thỉnh thoảng họ sẽ thay đổi thư viện và cuối cùng ngừng hỗ trợ thư viện mà bạn đã quen.


Lập luận tuyệt vời về việc phát triển các thư viện của riêng bạn, gần như đã bị thuyết phục và tôi muốn thử điều đó, bạn nghĩ tôi sẽ cần gì ngoài hướng dẫn tham khảo stm32fxx? Tôi cũng nên đọc hướng dẫn sử dụng lõi cánh tay? tôi sẽ sử dụng CMSIS chứ? Làm thế nào tôi sẽ truy cập vào thanh ghi và bộ nhớ? bạn có thể giải thích thêm hoặc cung cấp ví dụ về cách bắt đầu
ElectronS

một số điều nữa để suy nghĩ mỗi dòng mã thêm rủi ro. giải thích với sếp của bạn rằng bạn đang dự định sử dụng hàng chục đến hàng trăm ngàn dòng mã của ai đó, mà không xem xét từng bit của mã mà bạn đang sử dụng. các lớp mã, đặc biệt khi trừu tượng hóa, làm cho các nhị phân lớn hơn và hiệu suất giảm xuống. Vì vậy, một lần nữa giải thích với sếp của bạn rằng các đơn vị sản phẩm 10 triệu sẽ tiêu tốn thêm 35 phần trăm mỗi hoặc 3,5 triệu đô la vì bạn chọn sử dụng thư viện khiến bạn lười biếng.
old_timer

ông chủ của bạn có thể thuê một đội quân thay thế bạn bằng loại tiền đó, kiểm tra từng dòng mã để họ không nhận được 10.000 đơn vị và thấy họ phải dọn rác tất cả vì lỗi phần mềm do sử dụng phần mềm rủi ro. và sử dụng một bộ phận nhỏ hơn có giá thấp hơn ở tốc độ xung nhịp chậm hơn, sử dụng ít năng lượng hơn và chạy lâu hơn trong một lần sạc pin. đôi khi nó là giá trị nỗ lực. và chắc chắn, đôi khi không.
old_timer

cảm ơn vì nhiều điểm bạn đã nêu, nhưng bạn có thể trả lời câu hỏi của tôi, về cách tốt nhất để bắt đầu không? sử dụng tập tin CMSIS và HAL .h để đăng ký tên và vị trí bộ nhớ ??
ElectronS

Không có "tốt nhất", sử dụng từ đó làm cho nó thành ý kiến ​​cá nhân, không thực tế. Chỉ cần chọn một cái và bắt đầu, hoặc làm như tôi có thể, thử một cái cho đến khi bạn chạm vào một khối đường, sau đó thử một cái khác, và đi xung quanh đẩy từng khối đường trở lại khối đường tiếp theo cho đến khi một hoặc tất cả vượt qua.
old_timer

14

Hãy để tôi nói với bạn rằng rất nhiều người trong chúng ta chia sẻ sự thất vọng giống như bạn với các thư viện HAL, chúng thực sự được ghi lại một cách nghèo nàn và mơ hồ và vẫn còn nhiều lỗi.

Vì vậy, để trả lời câu hỏi của bạn tại sao ST quyết định về HAL rất đơn giản:

  1. Họ muốn tạo một lớp trừu tượng phần cứng, bằng tiếng Anh đơn giản có nghĩa là họ muốn phát triển phần mềm và mã độc lập với bộ điều khiển vi mô, vì vậy nếu bạn viết mã ngày hôm nay cho stm32f4 và bạn cần sau vài năm để chuyển sang stm32f7 sẽ dễ dàng và mã sẽ có tính mô-đun cao.

  2. Điều này cũng cho phép nhiều nhà phát triển như lập trình viên phần mềm làm việc với bộ điều khiển vi mô mà không thực sự hiểu hoặc đi sâu vào chi tiết sâu về cách phần cứng đạt được một nhiệm vụ. Các công ty như ST và TI (bắt đầu con đường này ngay bây giờ) đang cố gắng thực hiện phát triển nhúng tương tự như phát triển mã PC nơi bạn sử dụng trình điều khiển cấp cao để phát triển mã NHANH CHÓNG. Sự vụng về và thiếu tối ưu hóa trong trình điều khiển và thư viện của họ được bù đắp bằng hiệu suất cao của các thiết bị ARM.

  3. Tôi nghĩ STM32cubeMX là một công cụ tuyệt vời nếu bạn đang sử dụng các thư viện HAL, bởi vì công việc tốn nhiều thời gian nhất là khởi tạo các thiết bị ngoại vi và bây giờ bạn có thể làm điều đó trong một thời gian rất ngắn, với giao diện trực quan có thể dễ dàng thay đổi mà không ảnh hưởng đến mã người dùng (nếu bạn viết mã của mình ở vị trí thích hợp) Bạn có thể sử dụng Stm32cubeMx và sau đó xem lại mã và cố gắng hiểu cách thức và lý do họ sử dụng từng chức năng, theo cách này bạn đang cố gắng giải bài tập và có hướng dẫn giải pháp gần đó để sửa IMO tuyệt vời.

  4. Lõi ARM phức tạp nên các phương thức cũ mà chúng tôi sử dụng trên bộ điều khiển vi mô 8 bit như xử lý các thanh ghi trực tiếp (viết C theo kiểu lắp ráp) là không khả thi, nó tốn thời gian và khiến mã khó duy trì do kiến ​​trúc phức tạp (kiểm tra thiết lập đồng hồ chẳng hạn)


6
Điều này rất dễ hiểu, tuy nhiên tất cả những điều này cũng áp dụng cho StdPeriph, phải không? Ý tôi là, nó đã là một thư viện trừu tượng hóa phần cứng, vậy đâu là điểm trong việc tạo một cái mới thay vì cải thiện cái cũ? Tôi thực sự tò mò, tôi rất mới với ARM, tôi đã sử dụng PIC trong nhiều năm.
Giăng

Thậm chí còn hơn thế đối với các thư viện tuân thủ CMSIS
Scott Seidman

1
@john, theo như tôi hiểu thì HAL trừu tượng hơn và ít phụ thuộc vào phần cứng hơn so với các thư viện tiêu chuẩn.
ElectronS

12

Tôi biết điều này sẽ kéo dài và có nhiều ý kiến ​​nhưng vì chúng tôi vừa (thành công) phát hành sản phẩm mới của mình bằng HAL, tôi nghĩ rằng nó đáng để xem xét. Ngoài ra, tôi không làm việc cho ST, tôi ghét từng chút của HAL, gần như khởi động lại dự án với StdPeriph, tôi đã cảm thấy đau - nhưng giờ tôi đã hiểu tại sao.

Đầu tiên, một chút về lý lịch. Chúng tôi phát triển các hệ thống đo từ xa công suất cực thấp và sản phẩm của chúng tôi được cung cấp bởi STM32L1. Khi chúng tôi bắt đầu làm việc với phần sụn, chúng tôi có các lựa chọn thông thường cho các thiết bị ST (kim loại trần): làm mọi thứ bằng tay, sử dụng thư viện StdPeriph hoặc đi với HAL. Các anh chàng ST đã thuyết phục chúng tôi đi cùng HAL - vì vậy chúng tôi đã làm. Thật là đau đớn, chúng tôi đã phải làm việc xung quanh các lỗi trong phần mềm (phần I2C khiến chúng tôi phát điên trong một thời gian khá lâu) và tôi vẫn không thích kiến ​​trúc tổng thể. Nhưng nó đã có tác dụng.

Khi tôi chuyển từ máy tính để bàn sang nhúng, cách đây hơn một năm, tôi đã bị choáng bởi một thứ lạ mà tôi không thể đặt tên hoặc thậm chí không nắm bắt được. Theo thời gian, tôi đã có thể hiểu những gì - hay đúng hơn, những gì đang - đang diễn ra: thế giới nhúng đang trong quá trình chuyển đổi. Silicon được rẻ hơn mỗi ngày và MCU mạnh hơn và linh hoạt hơn. Ngày càng có nhiều thiết bị, bất kể kích thước, nhu cầu năng lượng, dựa vào MCU chung. Ngày càng có nhiều công ty tham gia trò chơi, mang đến một loạt các nhà phát triển mới với nhiều nền tảng khác nhau. Văn hóa "trung bình" trôi tuột khỏi "anh chàng EE" truyền thống với các kỹ năng thuật sĩ lập trình "thành" anh chàng SW với kiến ​​thức phần cứng mơ hồ ".

Cho dù điều này là tốt hay xấu là không liên quan. Nó chỉ xảy ra. Trên thực tế, nó cũng đã xảy ra với thế giới phần mềm, hơn một lần. Sự bùng nổ web vào năm 2000 đã thu hút những người mới sử dụng PHP / MySQL - hãy nói với họ rằng có các thanh ghi trong CPU, họ sẽ trả lời "Tôi đang sử dụng Linux, vì vậy không có Registry trong HĐH của tôi". Trước đó, các hệ điều hành đa người dùng chạy trong chế độ được bảo vệ cho phép các nhà phát triển lười biếng không bao giờ thiết lập ISR trong toàn bộ sự nghiệp của họ và vẫn ổn . Thậm chí trước đó, bàn phím và màn hình đã khiến các tay đấm thẻ và nhà sản xuất máy in phát điên.

Và vâng, các xu hướng hiện tại làm cho cá nhân tôi buồn, khi tôi thấy các nhà phát triển thiếu hiểu biết sợ hãi với các công nghệ sáng bóng mới nhất, trong khi hoàn toàn không thể liên kết chúng với lịch sử. Khi tôi thấy một người trẻ hơn tôi viết mã một trò chơi bằng Javascript với WebGL vào năm 2015, tôi muốn hét lên "Không có gì mới! Tôi đã làm điều tương tự với C ++ và SDK 3Dfx vào năm 1995!". Điều mà câu chuyện không kể là trò chơi của anh ấy chạy trên điện thoại di động của tôi, trong khi đó tôi cần một PC game thủ (và trình cài đặt, và tôi không thể đẩy các bản cập nhật của web). Sự thật là, anh ta có thể phát triển trò chơi trong một tháng, nơi tôi đã làm như vậy trong sáu hoặc mười hai.

Rõ ràng, cả ST hoặc TI hay Intel hay bất cứ ai sản xuất chip đều muốn bỏ lỡ lượt chơi. Và họ đã đúng. HAL là phản ứng của ST, và thực sự khá tốt, không chỉ về mặt kinh doanh hay tiếp thị, mà cả về mặt kỹ thuật. Lý do tại sao nó là âm thanh nằm trong tên:

Lớp trừu tượng phần cứng

Nếu bất cứ điều gì khác, đây là những gì bạn nên nhớ. HAL là một nỗ lực để di chuyển ra khỏi phần cứng. Đây là kỹ thuật tốt vì nó cho phép chúng tôi tách rời các chức năng từ các chi tiết. Phân lớp là những gì cho phép phát triển các chương trình phức tạp - một bản tóm tắt trên phần khác, xuống phần cứng. Trừu tượng thực sự là công cụ mạnh nhất mà chúng ta phải quản lý sự phức tạp . Tôi rất nghi ngờ bất kỳ ai trên hành tinh này sẽ có thể lập trình một trình duyệt web lắp ráp cho một CPU cụ thể.

Sự thay đổi văn hóa thực sự rất khó tiêu hóa, nhưng vì tôi phải nghĩ rằng người ta không cần phải đọc Nghệ thuật lập trình máy tính của Knuth để phát triển các ứng dụng web, thế giới EE phải thừa nhận có những người mới có thể (và sẽ!) Phát triển mã nhúng mà không cần phải đọc Fucking Thánh Reference Manual.

Tin tốt là những người chơi mới không có nghĩa là làm việc ít hơn cho những người chơi cũ - hoàn toàn ngược lại, IMHO. Họ sẽ gọi ai khi mọi thứ "không hoạt động?". Nếu bạn có RTFM (không giống như chúng) và nếu bạn biết mỗi bit của thanh ghi cấu hình tối nghĩa này làm gì, bạn có một lợi thế.

Giữa các bài đọc và thí nghiệm của bạn, chỉ cần đi với HAL. MCU mới? Không vấn đề gì. Dòng MCU mới? Cũng không có vấn đề gì (tôi đã mã hóa một thử nghiệm trên Hạt nhân STM32F4 chỉ trong một ngày với CubeMX, và sau đó chỉ cần chuyển nó sang thiết bị của chúng tôi ... nó cảm thấy đúng ). Mocking cho các bài kiểm tra đơn vị? Không vấn đề gì. Danh sách đi và về, bởi vì sự trừu tượng là tốt.

Tất nhiên, bản thân HAL không ổn 100%. Tài liệu này rất tệ (nhưng bạn có RT F HRM, phải không?), Có lỗi, ST đã bỏ phiên bản beta vào chúng tôi (có vẻ khá chuẩn trong những ngày này) và hỗ trợ công khai của họ là một trò đùa. Nhưng không phát hành HAL thậm chí còn tồi tệ hơn.


Tôi thấy bạn đến từ đâu. Theo tôi hiểu, mọi thứ (không may) đi theo cách của Arduino, cố gắng che giấu thực tế khỏi lập trình viên để thu hút nhiều người phần mềm cấp cao hơn vào lập trình phần cứng và đây là lý do đằng sau các thư viện như HAL. Tuy nhiên, nhìn thấy nó tệ đến mức nào và cũng là một mớ hỗn độn, tôi không nghĩ họ sẽ thành công trong việc này sớm.
John

@ John: HAL không che giấu bất kỳ "thực tế" nào. Tất cả mọi thứ là có cho bạn để điều chỉnh. Tất cả các phần là tùy chọn - ví dụ: bạn có thể chỉ muốn sử dụng các macro để truy cập vào các thanh ghi hoặc chỉ một trình điều khiển cụ thể (ví dụ I2C) hoặc mọi thứ bao gồm ISR và cấu hình đồng hồ. Lựa chọn của bạn. Tuy nhiên, tôi đồng ý các tài liệu hút rất nhiều. (Tôi đã nói với ST và họ hứa rằng họ đang làm việc trên BTW)

Chúng tôi đang lặp lại làm tương tự với các công cụ mới. Bởi vì các công cụ mới hứa hẹn sẽ làm cho công việc dễ dàng hơn và nhanh hơn do đó tiết kiệm chi phí. Nhưng chúng ta vẫn làm như vậy, bởi vì con người vẫn như vậy, bất kể là năm 2095 hay 1995. Sự lựa chọn để lại cho chúng ta là nếu chúng ta làm theo các công cụ mới hoặc ở lại với các công cụ đã quen thuộc của chúng ta.
Jony
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.