nền tảng, Arduino không có thời gian chạy lỗi ngoại lệ xử lý). Chạy ra khỏi bộ nhớ động là một lỗi mà có thể rất khó để theo dõi bởi vì các ký họa có thể chạy mà không có vấn đề cho ngày hoặc vài tuần trước khi nó bắt đầu hỏng thông qua bộ nhớ đủ tư.
Nếu bạn sử dụng mảng ký tự C, bạn đang ở trong kiểm soát của bộ nhớ cách sử dụng: bạn đang phân bổ một (static) số tiền cố định của bộ nhớ tại thời gian biên dịch, do đó bạn không nhận được rò rỉ bộ nhớ. Arduino ký họa của bạn sẽ có cùng một lượng bộ nhớ có sẵn cho tất cả thời gian nó đang chạy. Và nếu như bạn cố gắng để cấp phát bộ nhớ hơn có sẵn, tìm ra nguyên nhân dễ dàng hơn vì có các công cụ cho bạn biết bao nhiêu bộ nhớ tĩnh bạn đã allo- tạp (xem tham khảo để AVR-objdump trong Recipe 17,1).
Tuy nhiên, với C mảng ký tự, nó dễ dàng hơn cho bạn để có một vấn đề khác: C sẽ không ngăn cản bạn từ sửa đổi bộ nhớ ngoài giới hạn của mảng. Vì vậy, nếu bạn phân bổ một mảng như myString [4], và gán myString [4] = 'A' (nhớ, myString [3] là sự kết thúc của mảng), sẽ không có gì ngăn cản bạn làm điều này. Nhưng ai biết được những gì từ các bộ nhớ myString [4] đề cập đến? Và ai mà biết được liệu giao 'A' đến vị trí bộ nhớ sẽ làm cho bạn một vấn đề? Nhiều khả năng, nó sẽ gây ra họa của bạn để hoạt động sai.
Vì vậy, Arduino của thư viện có sẵn String, nhờ sử dụng bộ nhớ động, chạy các nguy cơ của việc ăn lên bộ nhớ có sẵn của bạn. Mảng ký tự C của yêu cầu chăm sóc trên một phần của bạn để đảm bảo rằng bạn không vượt quá giới hạn của mảng mà bạn sử dụng. Vì vậy, sử dụng built- Arduino trong thư viện string nếu bạn cần khả năng xử lý văn bản phong phú và bạn sẽ không được tạo ra và sửa đổi Strings hơn và hơn nữa. Nếu bạn cần để tạo và chỉnh sửa chúng trong một vòng lặp đó là liên tục lặp đi lặp lại, bạn nên phân bổ một mảng C nhân vật lớn và viết mã của bạn một cách cẩn thận để bạn không viết qua các giới hạn của mảng đó.
Ví dụ khác, nơi bạn có thể thích mảng ký tự C trên Arduino Strings là trong bản phác thảo lớn mà cần nhất của bộ nhớ RAM có sẵn hoặc flash. Đoạn mã ví dụ Arduino chuỗi ToInt sử dụng gần 2 KB hơn đèn flash hơn mã tương đương sử dụng một mảng C trưng acter và atoi để chuyển đổi một int. Các phiên bản Arduino dây cũng đòi hỏi nhiều hơn một chút RAM để phân bổ thông tin lưu trữ ngoài các chuỗi thực tế.
Nếu bạn nghi ngờ rằng các thư viện String, hoặc bất kỳ thư viện khác mà làm cho sử dụng dynam- cấp phát bộ nhớ ically, có thể bị rò rỉ bộ nhớ, bạn có thể xác định có bao nhiêu bộ nhớ là miễn phí tại bất kỳ thời gian nhất định; xem Recipe 17.2. Kiểm tra lượng RAM khi phác thảo của bạn bắt đầu, và giám sát nó để xem liệu nó giảm theo thời gian. Nếu bạn nghi ngờ một vấn đề với các thư viện String, tìm kiếm danh sách các lỗi còn mở (http://code.google.com/ p / Arduino / vấn đề / list) cho "String."
Xem thêm
Sự phân bố Arduino cung cấp chuỗi ví dụ phác thảo ( File → Ví dụ → Strings). Các trang tham khảo String có thể được tìm thấy tại http://arduino.cc/en/Reference/StringObject.
đang được dịch, vui lòng đợi..
