Tối ưu code cho chương trình

espring

Sinh viên đại học
#1
Mình đưa ra luồng này để mọi người cùng thảo luận về vấn đề khá quan trọng trong việc lập trình nhúng, đó là làm thế nào để tối ưu hóa code chương trình, để hệ thống đạt được performance tốt nhất. Để làm được điều đó không chỉ cần tư duy mà còn là kinh nghiệm lập trình.
Mong mọi người sẽ chia sẻ những kinh nghiệm của mình về vấn đề optimization để mọi người cùng biết.

Mình mở đầu bằng câu hỏi sau:
Mã:
Bạn sử dụng giải thuật nào để quét ma trận phím?
Dung lượng bộ nhớ và thời gian tối đa chương trình cần để thực hiện cho từng chức năng như thế nào?
Làm thế nào để thư viện "user-friendly" nhất?
 

dainv

http://vntech24h.com/
#4
Mình đưa ra luồng này để mọi người cùng thảo luận về vấn đề khá quan trọng trong việc lập trình nhúng, đó là làm thế nào để tối ưu hóa code chương trình, để hệ thống đạt được performance tốt nhất. Để làm được điều đó không chỉ cần tư duy mà còn là kinh nghiệm lập trình.
Mong mọi người sẽ chia sẻ những kinh nghiệm của mình về vấn đề optimization để mọi người cùng biết.

Mình mở đầu bằng câu hỏi sau:
Mã:
Bạn sử dụng giải thuật nào để quét ma trận phím?
Dung lượng bộ nhớ và thời gian tối đa chương trình cần để thực hiện cho từng chức năng như thế nào?
Làm thế nào để thư viện "user-friendly" nhất?
Mình rất ủng hộ bạn trong vấn đề này, nhưng thực sự mình làm với AVR nói chung và các VDK khác thì thấy 1 điều, việc tối ưu hóa code chỉ cần khi sử dụng các dự án lớn, còn các ứng dụng nhỏ thì rất ít bạn quan tâm việc đó. Với việc tối ưu hóa code của C còn phụ thuộc nhiều vào compiler của VDK đó. Thế nên ai dùng quen VDK nào với trình compiler nào thì sẽ quen cách để tối ưu nó nhất -> tối giản bộ nhớ nhất và ổn định nhất. Vì vậy mình thấy threads này rất khó để bàn luận :D
 

espring

Sinh viên đại học
#5
Mình rất ủng hộ bạn trong vấn đề này, nhưng thực sự mình làm với AVR nói chung và các VDK khác thì thấy 1 điều, việc tối ưu hóa code chỉ cần khi sử dụng các dự án lớn, còn các ứng dụng nhỏ thì rất ít bạn quan tâm việc đó. Với việc tối ưu hóa code của C còn phụ thuộc nhiều vào compiler của VDK đó. Thế nên ai dùng quen VDK nào với trình compiler nào thì sẽ quen cách để tối ưu nó nhất -> tối giản bộ nhớ nhất và ổn định nhất. Vì vậy mình thấy threads này rất khó để bàn luận :D
Ý kiến bạn đưa ra rất hợp lý.
Mình cũng thấy tối ưu hoá chương trình ngay từ những ứng dụng nhỏ nhất là một cách rèn luyện kỹ năng rất tốt đó chứ. Đồng thời, với bất kỳ dự án nào, giả sử yêu cầu đặt ra cho phép sử dụng chip A, nhưng nhờ được tối ưu, nên nhà phát triển chỉ cần sử dụng chip B, với giá thành rẻ hơn, thì như thế chẳng phải sẽ rất tiết kiệm chi phí sao? Với một dự án càng lớn thì càng đòi hỏi người phát triển càng có nhiều kỹ năng để sản phẩm đạt được chất lượng cao nhất.
Compiler khác nhau cũng là một sự khác biệt, nhưng sự khác biệt đó không nhiều. Điều mình muốn đề cập tới khi lập thread này là vấn đề tư duy và kỹ năng lập trình. Vì thế để đông đảo bạn đọc có thể hiểu, thì sẽ chỉ sử dụng những compiler phổ biến (hiện tại các compiler hầu hết đều hỗ trợ ngôn ngữ C), nên sự khác biệt không nhiều, hoặc bạn nào thích có thể dùng thêm java nếu muốn.
Mình mong mọi người sẽ chia sẻ từ những điều nhỏ nhặt nhất, để chúng ta cùng rèn luyện được những kỹ năng cần thiết nhất.

Với ví dụ mình đưa ra, có thể nghĩ đơn giản đó là một bài tập về Lập trình và Giải thuật.
Mình đưa vào box AVR thực chất cũng vì viết vội do hơi bận việc. Mình sẽ đưa vào box hợp lý hơn với chủ đề.

Rất cảm ơn ý kiến đóng góp của bạn fb:p
 

mta_cdt

Super Moderator
Thành viên BQT
#6
rất cảm ơn espring thực sự thì vấn đề tiết kiệm tài nguyên của chip rất quan trọng đặc biệt với những dự án lớn như nhúng. 1 giải thuật hợp lý sẽ làm cho thời gian xử lý nhanh và chương trình nhìn sáng sủa hơn nhiều. Đối với AVR nói riêng có thể bỏ qua được 1 số hàm trong thư viện tích hợp sẵn thay vào đó mình tự viết thì cũng tiết kiệm được kha khá bộ nhớ.
1 ví dụ là khi hiển thị LCD nếu mà không cần đọc từ LCD thì có thể nối chân RW xuống mass khi đó chỉ mất 6 chân để hiển thị LCD thôi.
 
#7
Mình đưa ra luồng này để mọi người cùng thảo luận về vấn đề khá quan trọng trong việc lập trình nhúng, đó là làm thế nào để tối ưu hóa code chương trình, để hệ thống đạt được performance tốt nhất. Để làm được điều đó không chỉ cần tư duy mà còn là kinh nghiệm lập trình.
Mong mọi người sẽ chia sẻ những kinh nghiệm của mình về vấn đề optimization để mọi người cùng biết.

Mình mở đầu bằng câu hỏi sau:
Mã:
Bạn sử dụng giải thuật nào để quét ma trận phím?
Dung lượng bộ nhớ và thời gian tối đa chương trình cần để thực hiện cho từng chức năng như thế nào?
Làm thế nào để thư viện "user-friendly" nhất?
Chủ đề này khá hay!Nó giúp chúng ta tiết kiệm được nhiều tài nguyên hơn cũng như code chúng ta sẽ dễ hiểu hơn và mang tính khoa học hơn.
Bạn đăng chủ đề này ắt hẳn bạn đã có 1 số chủ kiến + kinh nghiệm,vậy bạn hãy đưa ra vấn đề và dẫn dắt mọi người đi vào vấn đề để cùng thảo luận đị.
 

espring

Sinh viên đại học
#8
rất cảm ơn espring thực sự thì vấn đề tiết kiệm tài nguyên của chip rất quan trọng đặc biệt với những dự án lớn như nhúng. 1 giải thuật hợp lý sẽ làm cho thời gian xử lý nhanh và chương trình nhìn sáng sủa hơn nhiều. Đối với AVR nói riêng có thể bỏ qua được 1 số hàm trong thư viện tích hợp sẵn thay vào đó mình tự viết thì cũng tiết kiệm được kha khá bộ nhớ.
1 ví dụ là khi hiển thị LCD nếu mà không cần đọc từ LCD thì có thể nối chân RW xuống mass khi đó chỉ mất 6 chân để hiển thị LCD thôi.
Đúng vậy. Đối với những ứng dụng hiển thị LCD thông thường mình cũng toàn grounded RW fb:p
Chủ đề này khá hay!Nó giúp chúng ta tiết kiệm được nhiều tài nguyên hơn cũng như code chúng ta sẽ dễ hiểu hơn và mang tính khoa học hơn.
Bạn đăng chủ đề này ắt hẳn bạn đã có 1 số chủ kiến + kinh nghiệm,vậy bạn hãy đưa ra vấn đề và dẫn dắt mọi người đi vào vấn đề để cùng thảo luận đị.
Mình cũng có một chút kinh nghiệm tự tích lũy được cho bản thân. Mình có thể nêu sơ qua như sau:
- giải thuật phải tối ưu
- để tiết kiệm tối đa bộ nhớ, mình thường sử dụng các lệnh tiền xử lý
- để nâng cao hiệu năng chương trình, nên dùng else tối đa có thể để tăng chiều sâu cho cây lệnh, ...
- nên cân đối giữa tốc độ xử lý của chương trình và bộ nhớ sử dụng, tùy từng trường hợp mà chọn hiệu năng hay bộ nhớ.
còn vì sao lại thế, ưu nhược điểm của phương pháp mình sử dụng ra sao, hy vọng được mọi người đóng góp thêm :p
Đó chỉ là một chút kinh nghiệm chung của mình, để rõ hơn có lẽ chúng ta nên đi qua những ví dụ cụ thể (như ví dụ của mình chẳng hạn). Mọi người hãy đưa ra ý kiến, giải pháp của mình cho vấn đề được nêu :x
 

hoangthach

Sinh viên đại học
#9
Mình thì chỉ có 1 chút kinh nghiêm tích lũy được trong 1 thời gian dài nghiên cứu và học tập :
+ Vạch ra các yêu cầu cần thiết của sản phẩm sau đó mới chọn chip phù hợp có giá thành thấp nhất và phải đảm bảo chức năng cần sử dụng
+ Thuật toán phải tối ưu nhất
+ Sử dụng định nghĩa các biến và các lệnh tiền xử lí phù hợp để tiếp kiệm tối đa dung lượng bộ nhớ
+ Hạn chế tối đa các phương trình tính toán phức tạp trong quá trình xử lí lệnh
+ Han chế tối đa tốc độ xử lí ( clock cho vi xử lí ) cần thiết để tiếp kiệm điện năng và giảm giá thành chế tạo
 

Windy_nguyen

Học sinh phổ thông
#10
Mình rất ủng hộ bạn trong vấn đề này, nhưng thực sự mình làm với AVR nói chung và các VDK khác thì thấy 1 điều, việc tối ưu hóa code chỉ cần khi sử dụng các dự án lớn, còn các ứng dụng nhỏ thì rất ít bạn quan tâm việc đó. Với việc tối ưu hóa code của C còn phụ thuộc nhiều vào compiler của VDK đó. Thế nên ai dùng quen VDK nào với trình compiler nào thì sẽ quen cách để tối ưu nó nhất -> tối giản bộ nhớ nhất và ổn định nhất. Vì vậy mình thấy threads này rất khó để bàn luận :D
Theo mình nghĩ thì phụ thuộc nhiều vào code đó chứ cùng một chức năng như nhau nhưng một ông thầy và một thằng sv viết nó khác nhau hoàn toàn.. một phần khác là do compiler như bạn nói cái cách mà compiler chuyển từ C -> asm quyết định mức tối ưu của code khi mà compiler free nó chuyển qua asm dài lằng ngoằng còn compiler non free thì nó phải ngắn gọn mạnh mẽ hơn chứ :)
 

Quảng cáo Google