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

Thảo luận trong 'Thảo luận chung'

Đang xem chủ đề này ( Thành viên: 0, Khách: 0)

  1. espring

    espring Sinh viên đại học

    Tham gia ngày:
    11/10/12
    Bài viết:
    49
    Đã được thích:
    47
    Điểm thành tích:
    18
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư Điện tử - CNTT
    Nơi ở:
    Hà Nội
    [​IMG]
    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?
     
  2. espring

    espring Sinh viên đại học

    Tham gia ngày:
    11/10/12
    Bài viết:
    49
    Đã được thích:
    47
    Điểm thành tích:
    18
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư Điện tử - CNTT
    Nơi ở:
    Hà Nội
    Không có ai cùng thảo luận với mình chủ đề này sao fb>:(
     
  3. thuc tran

    thuc tran Học sinh phổ thông

    Tham gia ngày:
    1/11/12
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Nghề nghiệp:
    sinh viên công nghệ
    Nơi ở:
    hà nội
    cái này đang muốn học cậu chia sẻ đi bạn hjj
     
  4. dainv

    dainv http://vntech24h.com/

    Tham gia ngày:
    6/9/12
    Bài viết:
    411
    Đã được thích:
    655
    Điểm thành tích:
    93
    Giới tính:
    Nam
    Nghề nghiệp:
    Engineer Electronic
    Nơi ở:
    Vĩnh Phúc
    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
     
  5. espring

    espring Sinh viên đại học

    Tham gia ngày:
    11/10/12
    Bài viết:
    49
    Đã được thích:
    47
    Điểm thành tích:
    18
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư Điện tử - CNTT
    Nơi ở:
    Hà Nội
    Ý 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
     
  6. mta_cdt

    mta_cdt Super Moderator Staff Member

    Tham gia ngày:
    10/8/12
    Bài viết:
    2,893
    Đã được thích:
    3,583
    Điểm thành tích:
    113
    Giới tính:
    Nam
    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.
     
    espring thích bài này.
  7. chuong_prof

    chuong_prof Kỹ sư

    Tham gia ngày:
    3/9/12
    Bài viết:
    149
    Đã được thích:
    281
    Điểm thành tích:
    63
    Giới tính:
    Nam
    Nghề nghiệp:
    Tooling Engineer Trainee in Schneider Electric
    Nơi ở:
    Ho Chi Minh City
    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 đị.
     
  8. espring

    espring Sinh viên đại học

    Tham gia ngày:
    11/10/12
    Bài viết:
    49
    Đã được thích:
    47
    Điểm thành tích:
    18
    Giới tính:
    Nam
    Nghề nghiệp:
    Kỹ sư Điện tử - CNTT
    Nơi ở:
    Hà Nộ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
    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
     
    demon52Admin thích bài này.
  9. hoangthach

    hoangthach Sinh viên đại học

    Tham gia ngày:
    18/7/13
    Bài viết:
    47
    Đã được thích:
    74
    Điểm thành tích:
    18
    Giới tính:
    Nam
    Nghề nghiệp:
    nghiên cứu
    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
     
  10. Windy_nguyen

    Windy_nguyen Học sinh phổ thông

    Tham gia ngày:
    16/9/13
    Bài viết:
    19
    Đã được thích:
    17
    Điểm thành tích:
    3
    Giới tính:
    Nam
    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ứ :)
     
    nampro thích bài này.

Chia sẻ trang này