6

Tôi có một số beagleboard với TMS320C64x + DSP. Tôi đang làm việc trên một ứng dụng xử lý hình ảnh beagleboard. Đây là cách hoạt động:Beagleboard: Làm cách nào để gửi/nhận dữ liệu đến/từ DSP?

  1. ARM đọc hình ảnh từ tệp và đưa hình ảnh vào mảng 2D.
  2. Cánh tay gửi ma trận đến DSP. DSP nhận ma trận.
  3. DSP thực hiện thuật toán xử lý hình ảnh trên ma trận nhận được (mã thuật toán sử dụng khoảng 5MB bộ nhớ được cấp phát động).
  4. DSP gửi hình ảnh đã xử lý (ma trận) đến ARM. Cánh tay nhận ma trận.
  5. Cánh tay lưu hình ảnh đã xử lý vào một tệp.

Tôi đã viết mã cho các bước 1,3,5. Cách dễ nhất để thực hiện các bước 3 + 4 (gửi dữ liệu) là gì? Các ví dụ mã được hoan nghênh.

Trả lời

3

Cách đơn giản nhất là sử dụng bộ nhớ chia sẻ:

Sử dụng các module CMEM kernel để phân bổ một đoạn bộ nhớ trên ARM có thể được truy cập từ ARM và DSP. Sau đó chuyển con trỏ xuống DSP bằng cách sử dụng thành phần DspBios NOTIFY.

Khi DSP được thực hiện với quá trình xử lý, bạn có thể thông báo cho ARM qua NOTIFY.

Bằng cách này, không cần phải sao chép dữ liệu từ ARM sang DSP hoặc ngược lại. Tất cả những gì bạn phải đảm bảo là dữ liệu đến từ thành phần CMEM. Điều này đảm bảo bộ nhớ tiếp giáp (DSP không biết về trình quản lý bộ nhớ ARM).

2

Bộ nhớ dùng chung là cách tiếp cận đúng, nhưng việc học cách làm điều đó có thể là một nỗi đau. Công cụ C6Run có thể tóm tắt thông tin liên lạc ARM/DSP giúp bạn dễ dàng hơn. Mặc dù NOTIFY thực sự là API thích hợp để sử dụng, C6Run sử dụng CMEM bằng cách sử dụng API cũ hơn.

Nếu bạn muốn thử C6Run trên BeagleBoard, cách dễ nhất là bằng cách theo dõi instructions on the eLinux wiki for setting up C6Run for the ECE597 course given by Mark Yoder at Rose-Hulman. Những hướng dẫn này phụ thuộc vào việc chạy hình ảnh demo Angstrom (2). Một phiên bản ổn định được sử dụng để thể hiện chức năng của phần cứng cũng được ghi lại (3).

(2): www.angstrom-distribution.org/demo/beagleboard (3): code.google.com/p/beagleboard/wiki/BeagleBoardDiagnosticsNext