Có nó làm. Mặc dù tất cả các bộ điều khiển Cortex M sẽ chia sẻ cùng một lõi và một số thiết bị ngoại vi lõi, tất cả các thiết bị ngoại vi khác là dành riêng cho nhà cung cấp.
Ngay cả việc sử dụng CMSIS cũng không giúp bạn nhiều trong kịch bản đó vì nó sẽ chỉ bao gồm những thứ do ARM cung cấp, đó là lõi và các thiết bị ngoại vi cốt lõi (NVIC, Systick ...)
Vì vậy, cuối cùng nếu bạn chuyển từ nhà cung cấp này sang nhà cung cấp khác, bạn sẽ phải đọc bảng dữ liệu, hướng dẫn sử dụng (hoặc người dùng) và tìm hiểu cách thức hoạt động của công cụ. Bạn không nhất thiết phải tìm hiểu mọi tên đăng ký vì các nhà cung cấp hiện cung cấp các thư viện ngoại vi đặt một lớp trừu tượng lên trên phần cứng.
Nhưng nó không khó hay thách thức, đó là những gì bạn phải làm - Tôi nói đó thậm chí là một trong những phần thú vị hơn để tìm ra cách các thiết bị ngoại vi đó hoạt động.
Và sau khi bạn nhận ra điều này, bạn có thể muốn viết Lớp trừu tượng phần cứng để ngăn phần sụn của bạn hoàn toàn không sử dụng được cho bộ điều khiển khác. Nếu bạn có HAL ổn định, ít nhất bạn có thể đưa trình điều khiển thiết bị và các lớp ứng dụng qua bộ điều khiển tiếp theo của mình và chỉ phải thực hiện lại HAL.
Mặc dù các nhà cung cấp cung cấp các thư viện ngoại vi, hoạt động như một HAL, không có tiêu chuẩn nào giữa các nhà cung cấp. Vì vậy, ở mức thấp nhất, bạn sẽ phải điều chỉnh phần mềm của mình, đó là lý do tại sao tôi nói, rằng chính bạn có thể muốn viết HAL (trong đó bạn có thể sử dụng HAL của nhà cung cấp).
Nếu bạn muốn triển khai HAL ổn định, các tính năng của bạn rất có thể sẽ bị giới hạn ở chức năng rất cơ bản của các thiết bị ngoại vi thông thường, vì vậy mọi bộ điều khiển đều có thể được trừu tượng hóa. Thông thường, bạn sẽ mất một số tính năng nâng cao hơn của các thiết bị ngoại vi, vì chúng không có sẵn ở mọi nơi (giả sử cơ chế phát hiện baudrate hoặc thời gian chết tự động giữa các kênh PWM). Đó sẽ là cái giá phải trả. Nếu chúng ta cần những cơ chế đó cho ứng dụng của mình, chúng ta viết một trình điều khiển phần cứng chuyên dụng cho mục đích đó, vì vậy phần còn lại vẫn có thể hoạt động với HAL chung.
Sử dụng phương pháp này, tôi đã chuyển một ứng dụng cho hai bộ vi điều khiển khác chỉ thực hiện HAL, phần còn lại có thể được biên dịch mà không cần một thay đổi nào trong phần mềm.