Thông báo

Collapse
No announcement yet.

CCS dịch được 31% RAM

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • CCS dịch được 31% RAM

    Mình dùng trình dịch CCS ( CCS C Compile V4.038 ) nhưng ko dịch quá được 31%RAM
    Mong mọi người giúp đỡ

    Attached Files

  • #2
    bạn dùng có 31% thì nó hiển thị 31% còn bạn khai báo thêm biến rồi thì dùng thêm ram nó sẽ tăng lên @@
    31%-31% nghĩa là lúc nào RAM cũng chạy 31%
    Còn ví dụ: 15%-31% thì có lúc chạy 15% có lúc chạy 20% có lúc chạy 31%,..... nghĩa là RAM chạy dao động trong khoảng 15% tới 31%

    Comment


    • #3
      Nguyên văn bởi chung1608 Xem bài viết
      bạn dùng có 31% thì nó hiển thị 31% còn bạn khai báo thêm biến rồi thì dùng thêm ram nó sẽ tăng lên @@
      31%-31% nghĩa là lúc nào RAM cũng chạy 31%
      Còn ví dụ: 15%-31% thì có lúc chạy 15% có lúc chạy 20% có lúc chạy 31%,..... nghĩa là RAM chạy dao động trong khoảng 15% tới 31%
      nhưng khi em đang ở 31% mà có khai báo thêm một biến nữa là nó báo lỗi RAM liền.hic!

      Comment


      • #4
        nó bán lỗi gì mới đc, up ảnh nhớ up cả dòng bị lỗi nhé, up cái lỗi ko có thánh mới biết lỗi gì.

        Comment


        • #5
          Nguyên văn bởi chung1608 Xem bài viết
          nó bán lỗi gì mới đc, up ảnh nhớ up cả dòng bị lỗi nhé, up cái lỗi ko có thánh mới biết lỗi gì.
          vâng,
          khi thêm một biến nữa thì nó báo thế này:

          Error 74 : Not enough RAM foll variables ( báo ko đủ RAM cho biến ) nhưng mới có 31%RAM thôi mà?

          Khi mà khai báo biến mảng lên đến 98 biến thì là tầm 31% còn >98 là báo lỗi.

          ví dụ:

          int ABC[] = {0, 2,3,4,5..............97};
          Last edited by luongthitu; 28-11-2012, 18:29.

          Comment


          • #6
            Nguyên văn bởi luongthitu Xem bài viết
            vâng,
            khi thêm một biến nữa thì nó báo thế này:

            Error 74 : Not enough RAM foll variables ( báo ko đủ RAM cho biến ) nhưng mới có 31%RAM thôi mà?
            đã nói rồi, chụp hình lỗi và cái dòng khai báo biến bị lỗi

            Comment


            • #7
              chắc là khai báo một biến dạng mảng. Các biến chiếm ram là các biến khai báo dạng toàn cục, còn các biến cục bộ trong hàm thì nó không chiếm ram khi biên dịch, nó sẽ được phân bố trong stack điều khiển bởi các thanh ghi định địa chỉ, ...

              Comment


              • #8
                Nguyên văn bởi chung1608 Xem bài viết
                đã nói rồi, chụp hình lỗi và cái dòng khai báo biến bị lỗi
                thì nó chỉ thông báo thế chứ ko nói dòng nào bị lỗi cả...nên ko có gì để chụp cả.
                Not enough RAM foll variables

                thân


                ví dụ: vidu.zip

                chỉ cần thêm một biến bất kỳ nào trong biến mảng này nữa là báo quá RAM

                int ABC[] = {0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,0,1 ,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,0,1,2,3 ,4,5,6,7,8,9,10,
                0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,0,1, 2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7};
                như này chẳng hạn:
                int ABC[] = {0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,0,1 ,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,0,1,2,3 ,4,5,6,7,8,9,10,
                0,1,2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8,9,10,0,1, 2,3,4,5,6,7,8,9,10,0,1,2,3,4,5,6,7,8};
                ==>Not enough RAM foll variables

                //------------------------------------------------------------------------
                Còn viết bằng HI-TECH C thì còn tệ hơn, được có 48 biến, tới cái thứ 49 là lỗi

                Chương trình viết bằng hi-tech C

                #include <htc.h>

                int ABC[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 ,20,21,22,23,24,25,26,27,28,29,
                30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46 ,47,48};


                __CONFIG(HS & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT &
                SWBOREN & IESODIS & FCMDIS & LVPDIS & DEBUGDIS); //1st config. word
                __CONFIG(BORV21); //2nd config. word


                /************************************************** ****************************
                * CHUONG TRINH CON
                ************************************************** ****************************/

                //----- delay ----------------------------------------------------------------
                void delay(unsigned int time)
                {
                unsigned int i,j;
                for(i=0;i<time;i++)
                {
                for(j=0;j<time;j++){;}
                }
                }


                /************************************************** ****************************
                * CHUONG TRINH CHINH
                ************************************************** ****************************/
                void main(void)
                {
                // lcd_init();
                delay(100);
                while(1)
                {

                }
                }
                Báo lỗi

                (1273) Omniscient Code Generation not available in Lite mode (warning)
                HI-TECH C Compiler for PIC10/12/16 MCUs (Lite Mode) V9.71a
                Copyright (C) 2010 Microchip Technology Inc.
                Error [1250] C:\Users\abc\Desktop\mplap\lcd1\LCD 4 bit.c; 25. could not find space (98 bytes) for variable _ABC



                ********** Build failed! **********
                Last edited by luongthitu; 28-11-2012, 23:46.

                Comment


                • #9
                  em ko biết vì sao cả? help me

                  Comment


                  • #10
                    đây là 1 mảng liên tục, trong khi vùng RAM liên tục chỉ dài tối đa 96bytes từ địa chỉ 110h tới 16Fh ở bank 3. CCS báo ko đủ độ dài liên tục của mảng này thôi, còn ram thì vẫn còn trống

                    Comment


                    • #11
                      mình cũng vừa gặp hiện tượng này với PIC mình lâu không lập trình PIC vớ phải yêu cầu dùng PIC điều khiển bảng led 16x128 thời hạn có 4 ngày,thực tế hiện tượng này xảy như bác chung68 nói cách khắc phục của mình là thay đổi các khai báo các biến mảng,đầu tiên chưa thay đổi biên dịch nuốt 29-31% RAM thay đổi biên dịch chỉ còn chiến 3-4% RAM.mình thì dùng 8051 và AVR nên PIC không rõ lắm có thể còn nhiều nguyên nhân khác nữa,bạn có thể xem trong phần Help

                      Comment


                      • #12
                        Cắt chuỗi đó ra làm vài chuỗi khác. Xử lý hơi khó hơn nhưng mà 70% vẫn ô sờ kê

                        Comment


                        • #13
                          cái lỗi đó là do khai báo mảng liên tục tối đa cũng chỉ 96 byte thôi, bạn có thể chi cái mảng đó ra lmaf hai, chương trình cũng không phức tạp thêm là mấy cả, cái này do khả năng của trình biên dịch nó hỗ trợ tạo mã thôi. đôi khi bạn cũng gặp cái trường hợp tương tự đối với dữ liệu chứa trong bộ nhớ chương trình. Nói chung là tùy thuộc vào thằng biên dịch mà biết cách xử lý,...

                          Comment


                          • #14
                            việc cắt chuỗi thì em cũng từng làm rùi nhưng với mảng cỡ lớn thì cắt bao nhiêu cho đủ thực tế khi thay đổi với các dòng pic có thể khắc phục được một chút việc này em từng thử thay PÍC6F877A bằng PiC18F4431 nhưng không hiểu tại sao bây giờ PIC tăng giá nhanh thế PIC18F4431 còn đắt hơn cả ATMEGA128,trước đây vì AVR đắt mọi người chuyển sang dùng PIC bây giờ PIC đắt không biết sẽ chuyển sang dùng gì đây

                            Comment


                            • #15
                              Nguyên văn bởi dtcn_112 Xem bài viết
                              việc cắt chuỗi thì em cũng từng làm rùi nhưng với mảng cỡ lớn thì cắt bao nhiêu cho đủ thực tế khi thay đổi với các dòng pic có thể khắc phục được một chút việc này em từng thử thay PÍC6F877A bằng PiC18F4431 nhưng không hiểu tại sao bây giờ PIC tăng giá nhanh thế PIC18F4431 còn đắt hơn cả ATMEGA128,trước đây vì AVR đắt mọi người chuyển sang dùng PIC bây giờ PIC đắt không biết sẽ chuyển sang dùng gì đây
                              Có cách nào mà ko phải cắt chuỗi không nhỉ?

                              Comment

                              Về tác giả

                              Collapse

                              luongthitu Tìm hiểu thêm về luongthitu

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X