Hai hàm chuyển đổi giữa float và fractional của C30 được viết bằng C, do đó chúng tiêu tốn khá nhiều chu kỳ máy, nhưng nếu chúng được thực hiện chỉ khi khởi tạo các tham số thì cũng không thành vấn đề.
Tôi không nghĩ là nhân số float với 0x8000 sẽ chuyển đổi được float sang fractional (bạn hãy kiểm tra xem 0x8000 là giá trị nào trong định dạng cho số float).
Nhưng nếu bạn vẫn muốn chuyển đổi nhanh giữa float và fractional, với điều kiện ràng buộc tương tự như 2 hàm của C30 (float nằm trong giữa -1 và 1, không kể giá trị 1) thì vẫn có thể làm được. Tuy nhiên, bạn phải tìm hiểu định dạng của số float trong 32 bit (gồm 1 bit dấu, 8 bit cho số mũ theo cơ số 2, và 23 bit định trị), khi đó tôi tin là bạn sẽ có thể viết một đoạn chương trình cho phép chuyển đổi giữa float và fractional chỉ mất vài chục chu kỳ máy. Tôi không có thời gian để tìm hiểu kỹ hơn, nên chỉ gợi ý cho bạn như vậy thôi. Nếu bạn thử nghiệm thì nên dùng 2 hàm của C30 để khẳng định là hàm của bạn chạy tốt.
Về AN908, người ta đã chuẩn hóa các phương trình ngay từ đầu, chủ yếu dùng dạng fractional trong xử lý, và tôi nghĩ họ cũng có dùng cách chuyển đổi tôi vừa nêu trên, nhưng không viết cụ thể thành một chương trình con, do đó họ có thể thực hiện được như đã khẳng định trong tài liệu.
Chúc bạn thành công!
Thân,
|