Modularity là bạn của bạn. Viết vòng lặp chính của bạn để thực hiện công việc của nó bằng cách gọi các hàm, gọi hàm này, ..., cho đến mức mà các hàm của bạn sẽ đơn giản. Bắt đầu với vòng lặp chính và xuống cấp độ tiếp theo, tạo các hàm còn sơ khai; hoặc trống:
function foo(){
;
}
hoặc giả mạo:
function read_temperature(){
return(95);
}
, điều đó không làm gì ngoài việc trả lại bất cứ thứ gì mà mức gọi cần cho nó để có thể tiếp tục. Khi mức đó hoạt động, di chuyển xuống một mức và bắt đầu điền mã đơn giản tương tự gọi các hàm còn sơ khai. Dần dần bỏ chức năng tại một thời điểm cho đến khi bạn có một ứng dụng hoạt động.
Để gỡ lỗi một hàm trả về giá trị xấu hoặc để tạo một hàm mà không có bất kỳ ảnh hưởng nào từ phần còn lại của ứng dụng, bạn có thể xây dựng giàn giáo - một bản phác thảo đơn giản chỉ cung cấp cho hàm một số giá trị mẫu và trong hàm, in ra các giá trị tham số và một số giá trị trung gian, cho đến khi bạn hiểu rõ hơn về phần nào của hàm bị lỗi. Tôi thậm chí đã thực hiện các chức năng giả mạo nhắc tôi trên thiết bị đầu cuối để có giá trị trả về. (Rõ ràng kỹ thuật này chỉ có thể hoạt động nếu hệ thống có thể chịu được tốc độ tương đối băng của con người chúng ta! Một cách sử dụng khác cho giàn giáo.)
Stubbing hoạt động đặc biệt tốt để hỗ trợ các chức năng giao diện với phần cứng, cho phép bạn bắt đầu đưa ứng dụng lên trước khi bạn phải đi sâu vào các bảng dữ liệu, các vấn đề về thời gian và các chi tiết vụn vặt khác (như, không có các bộ phận!) sự tiến bộ của bạn
Nói về các vấn đề thời gian, việc bật một chân đầu ra tại một điểm cụ thể trong chương trình của bạn, chẳng hạn như nhập và thoát khỏi ISR, cung cấp cho bạn một sóng vuông ở chân Arduino có tần số hoặc chu kỳ nhiệm vụ có thể giúp bạn hiểu rõ hơn về thời gian bên trong của chương trình của bạn. Biểu mẫu cổng I / O trực tiếp, vd
PORTC ^= 0x01;
, sẽ bóp méo thời gian ít hơn so với gọi digitalWrite()
. Hữu ích nếu bạn có 'phạm vi tiện dụng hoặc một trong các DMM có khả năng đo tần số và / hoặc chu kỳ nhiệm vụ.
Tương tự, bạn có thể sử dụng chân đầu ra tương tự để xuất giá trị số cho đồng hồ của mình từ bên trong chương trình mà không làm ảnh hưởng đến thời gian quá nhiều hoặc làm phồng mã với các chức năng I / O nối tiếp. Sử dụng các hình thức I / O trực tiếp ở đây, quá.