GWHBOB 发表于 2012-8-11 19:37:36

9860sdk里关于内外存读取的问题

(写的有点凌乱O.o)
广告上说9860有8kb的(叫什么忘了,核心?)memory
变量肯定是在内存里的,var只能开8kb,还是4kb我忘了
可是我开const可以开到1gbj_0012.gif
那么const是在哪里呢?
访问const里的数据会不会比变量慢呢?
能不能直接一个指针过去强行将const当变量用呢?那么就爽了j_0003.gif

小饕的中文字库是在storage mem上的,显示读起来是有点慢
但是const呢?
我在写魔塔是图片是放在const上的,电脑上测试的时候不慢,但放到计算器上是就慢了
同样,中文显示在电脑上是立即的,但在计算器上要等一段时间
于是得到两个推论:
1)电脑模拟器没有考虑读取的速度,只模拟了cpu
2)const和storage是在一起的,那么就慢了

但是还有一点不同意见:
程序代码也可以写到8kb以上,那么程序放哪儿呢?如果放在比较慢的介质上,这显然不明智
还有堆栈?
而且const也没有storage慢的那么厉害,毕竟好多人都在用这种方法

我们的目的就是:更大、更快的内存!
有传言说内外存都在flash上,(还有人说flash上有一大块未开发领域)
希望得知9860数据存放的地方和方式


希望大家一起研究!

我有几个建议:
1)用\x看看var,const甚至函数的地址,如果有大牛还可以研究内存地图(就是金山游侠之类的方法)
2)sdk编译时生成了几个文件,我看了下,上面有内存分配、程序编译等等天机,可惜我基础不牢~
3)外国网站和casio官方

diameter 发表于 2012-8-11 20:45:25

本帖最后由 diameter 于 2012-8-11 20:50 编辑

1# GWHBOB

开const能开到1g!!!!不能啊,下面这段代码就不能通过编译
typedef unsigned char byte;
const byte test_data; /* 全局变量哦 */
错误信息是The size of B and R section should be 0x2000 bytes or less.
说明全局变量(在静态区)大小不能超过0x2000(dec:8192)byte

但是在栈上(比如函数里),和堆上(用malloc,calloc分配)就不存在这个问题了
(我手上没机器没法测试)

diameter 发表于 2012-8-11 20:54:37

下面的代码编译出来996字节

#include <fxlib.h>
typedef unsigned int uint;
typedef unsigned char byte;
const byte test_data;

int AddIn_main(int isAppli, unsigned short OptionNum)
{
byte a;
uint key;
Bdisp_AllClr_DDVRAM();
while (1);
{
GetKey(&key);
}
return 1;
}
/* 后面繁琐的#pragma预处理省略 */



const byte test_data;
改成
const byte test_data={0};
再编译立马成9kb了!是不是神奇...

diameter 发表于 2012-8-11 20:58:44

LZ应该见过最新的道路之星吧,它已经达到190多k了..我怀疑它就是把汉字库打包进了里面。
我没记错的话hzk是可以压缩的(ccdos里面就有),仙剑里面的字体文件(应该是16*16的)居然才60多k,没天理啊..

我们能不能找到将文件装入addin的途径?

diameter 发表于 2012-8-11 21:16:32

本帖最后由 diameter 于 2012-8-11 21:20 编辑

我在工程的debug文件夹下翻到了lst文件,里面居然全是汇编!就是每个.c源文件的汇编代码。
这个发现可能会有用。关于sh的汇编参加wudy发过的帖子http://www.cncalc.org/viewthread.php?tid=7016
SH SERIES C/C++ Compiler (Ver. 6.0C)                                                               11-Aug-2012 20:52:33PAGE    1

************ OBJECT LISTING ************

FILE NAME: E:\techtst\techtst.c

SCT OFFSET   CODE       C LABEL   INSTRUCTION OPERAND    COMMENT

       techtst.c   1    #include <fxlib.h>
       techtst.c   2   
       techtst.c   3    typedef unsigned int uint;
       techtst.c   4   
       techtst.c   5    typedef unsigned char byte;
       techtst.c   6   
       techtst.c   7    const byte test_data={0};
       techtst.c   8   
       techtst.c   9   
       techtst.c    10    int AddIn_main(int isAppli, unsigned short OptionNum)
P   00000000            _AddIn_main:                     ; function: AddIn_main
                                                         ; frame size=8200
    00000000 9005                   MOV.W       L314,R0    ; H'DFF8
    00000002 3F0C                   ADD         R0,R15
       techtst.c    11    {
       techtst.c    12            byte a;
       techtst.c    13            uint key;
       techtst.c    14            Bdisp_AllClr_DDVRAM();
    00000004 D302                   MOV.L       L314+2,R3; _Bdisp_AllClr_DDVRAM
    00000006 430B                   JSR         @R3
    00000008 0009                   NOP
       techtst.c    15            while (1);
    0000000A            L310:                           
    0000000A AFFE                   BRA         L310
    0000000C 0009                   NOP
    0000000E            L314:                           
    0000000E DFF8                   .DATA.W   H'DFF8
    00000010 <00000000>             .DATA.L   _Bdisp_AllClr_DDVRAM
       techtst.c    16            {
       techtst.c    17                  GetKey(&key);
       techtst.c    18            }
       techtst.c    19            return 1;
       techtst.c    20    }
       techtst.c    21   
       techtst.c    22   
       techtst.c    23   
       techtst.c    24   
       techtst.c    25   
       techtst.c    26    #pragma section _BR_Size
       techtst.c    27    unsigned long BR_Size;
       techtst.c    28    #pragma section
       techtst.c    29   
       techtst.c    30   
       techtst.c    31    #pragma section _TOP
       techtst.c    32   
       techtst.c    33    int InitializeSystem(int isAppli, unsigned short OptionNum)
P_T 00000000            _InitializeSystem:               ; function: InitializeSystem
                                                         ; frame size=0
       techtst.c    34    {
       techtst.c    35      return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
    00000000 D301                   MOV.L       L315+2,R3; _INIT_ADDIN_APPLICATION
    00000002 432B                   JMP         @R3
    00000004 0009                   NOP
    00000006            L315:                           




SH SERIES C/C++ Compiler (Ver. 6.0C)                                                               11-Aug-2012 20:52:33PAGE    2


SCT OFFSET   CODE       C LABEL   INSTRUCTION OPERAND    COMMENT

    00000006 0000                   .DATA.W   0
    00000008 <00000000>             .DATA.L   _INIT_ADDIN_APPLICATION
       techtst.c    36    }
       techtst.c    37   
       techtst.c    38    #pragma section
       techtst.c    39   
C   00000000            _test_data:                      ; static: test_data
    00000000 00                     .DATA.B   H'00
    00000001 00001F3F01             .DATAB.B    7999,0
             00         
B_B 00000000            _BR_Size:                        ; static: BR_Size
    00000000 00000004               .RES.L      1

SH SERIES C/C++ Compiler (Ver. 6.0C)                                                               11-Aug-2012 20:52:33PAGE    1


******** STATISTICS INFORMATION ********


********** ERROR INFORMATION ***********

NUMBER OF ERRORS:         0
NUMBER OF WARNINGS:         0




******* SOURCE LINE INFORMATION ********

COMPILED SOURCE LINE:       39



******* SECTION SIZE INFORMATION *******

PROGRAMSECTION (P):                               00000014 Byte(s)
PROGRAMSECTION (P_BR_Size):                     00000000 Byte(s)
PROGRAMSECTION (P_TOP):                           0000000C Byte(s)
CONSTANT SECTION (C):                               00001F40 Byte(s)
CONSTANT SECTION (C_BR_Size):                     00000000 Byte(s)
CONSTANT SECTION (C_TOP):                           00000000 Byte(s)
DATA   SECTION (D):                               00000000 Byte(s)
DATA   SECTION (D_BR_Size):                     00000000 Byte(s)
DATA   SECTION (D_TOP):                           00000000 Byte(s)
BSS      SECTION (B):                               00000000 Byte(s)
BSS      SECTION (B_BR_Size):                     00000004 Byte(s)
BSS      SECTION (B_TOP):                           00000000 Byte(s)

TOTAL PROGRAM SIZE: 00001F64 Byte(s)



********** LABEL INFORMATION ***********

NUMBER OF EXTERNAL REFERENCE SYMBOLS:            3
NUMBER OF EXTERNAL DEFINITION SYMBOLS:         4
NUMBER OF INTERNAL/EXTERNAL SYMBOLS:            10


*** COMMAND PARAMETER ***


-subcommand=C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\hmkC0.tmp

GWHBOB 发表于 2012-8-11 21:52:16

2# diameter
好吧你对的,只是没想到8k可以放那么多东西
魔塔大概也就用了5000左右的mem吧
但是魔塔的g1a却有47.4K!(想想那个geom吧)
到底是怎么回事?!

diameter 发表于 2012-8-11 21:54:30

6# GWHBOB

使用了头文件里函数——占空间
自己写的函数——占空间...

GWHBOB 发表于 2012-8-11 22:00:01

蛋看下魔塔的lst:******* SECTION SIZE INFORMATION *******

PROGRAMSECTION (P):                               00002DA4 Byte(s)
PROGRAMSECTION (P_BR_Size):                     00000000 Byte(s)
PROGRAMSECTION (P_TOP):                           0000000C Byte(s)
CONSTANT SECTION (C):                               000046DD Byte(s)
CONSTANT SECTION (C_BR_Size):                     00000000 Byte(s)
CONSTANT SECTION (C_TOP):                           00000000 Byte(s)
DATA   SECTION (D):                               000001F4 Byte(s)
DATA   SECTION (D_BR_Size):                     00000000 Byte(s)
DATA   SECTION (D_TOP):                           00000000 Byte(s)
BSS      SECTION (B):                               00000BF4 Byte(s)
BSS      SECTION (B_BR_Size):                     00000004 Byte(s)
BSS      SECTION (B_TOP):                           00000000 Byte(s)

TOTAL PROGRAM SIZE: 00008279 Byte(s)
友情提示:0x8279=33401 Bytes

GWHBOB 发表于 2012-8-11 22:07:43

好吧我忘了加constj_0012.gif
其实是可以的:const unsigned char mem={0};然后目录下多了个11M的add-in
啦啦啦啦啦啦
表示之前我都是这么做的:const unsigned char mem[]={0,0,0,0,0,…………};j_0003.gif

GWHBOB 发表于 2012-8-11 22:28:45

#include "fxlib.h"
#include "stdarg.h"
const unsigned char mem={0};
unsigned char mem2;
unsigned char *p,*p2,*p4;
int (*p3)();
int fun()
{
      ;
}
int printf7(int x,int y,char * msg,...)
{
      unsigned char c1,c2;
      unsigned char buf;
      va_listarg_list;

      va_start      (arg_list,msg);
      vsprintf      ((char*)buf,msg,arg_list);
      va_end                (arg_list);
      
      PrintXY (x,y,buf,0);

}
int AddIn_main(int isAppli, unsigned short OptionNum)
{
    unsigned int key;

    Bdisp_AllClr_DDVRAM();

    p=&mem;
    p2=&mem2;
    p3=fun;
    p4=(unsigned char*)"hello,world!";
    p=1;p=2;p=3;p=4;
    printf7(0,0,"%x,%x,%x",p,p,p);
    printf7(0,10,"%x,%x,%x",p,&p,&p);
    printf7(0,20,"%x,%x,%x",p2,p3,p4);

    while(1){
      GetKey(&key);
    }

    return 1;
}
Output:0,0,0
3033d4,3047db,3047dc
8100004,30020c,3056fc你有什么感悟?

diameter 发表于 2012-8-11 22:35:34

10# GWHBOB

模拟器还是真机的结果?别告诉我他们是线性顺序排列下来的..

GWHBOB 发表于 2012-8-11 23:04:15

11# diameter
模拟器……17mb耶~~~
就是变量放在800多,然后常量和函数指针(就是程序了,我猜)放在30多
但既然魔塔没有crash这个也不会有问题只要你吃得下17mb

Wudy 发表于 2012-8-12 02:05:36

标题

本帖最后由 Wudy 于 2012-8-12 02:16 编辑

启动一个add-in,os会把add-in文件装入0x00300000。
add-in文件有200b的文件头(存版本,图标之类的),所以真正的机器码是从0x00300200开始的,装入之后让指令指针寄存器指向0x00300200,程序就开始执行了。
这些初始化代码sdk都会帮你完成。
0x08100000开始是data段和bss段。sdk也会帮你初始化这两个段。
data段存储已经初始化的全局变量,静态变量,
bss段保存未初始化的全局变量和静态变量。
data段占可执行文件的空间,bss段不占空间!
因为bss段只需记录大小,程序运行的时候分配一段跟在data段后面就行了。
到这里,基本可以解释上面几楼的问题了。

想用指针乱访问肯定是不行的,想一下子多出很多可用的存储空间基本也不太可能。
还有一些见我syscall教程贴里pdf文档第7,11页。

GWHBOB 发表于 2012-8-12 10:38:31

恩恩他是Data,Bss有限制,Const,Program随便

GWHBOB 发表于 2012-8-12 10:42:28

启动一个add-in,os会把add-in文件装入0x00300000。
add-in文件有200b的文件头(存版本,图标之类的),所以真正的机器码是从0x00300200开始的,装入之后让指令指针寄存器指向0x00300200,程序就开始执行了。
这些 ...
Wudy 发表于 2012-8-12 02:05 http://www.cncalc.org/images/common/back.gif
OS会把¥@?!装到0x00300000,这么说那儿是可以乱堆东西的哈哈,就不知道怎么才能强行进去。
那么他内存到底有多大?求解释。
还有那个魔塔变慢的问题,求原因!!

Wudy 发表于 2012-8-12 10:55:02

你看过我说的那几页了?

wtof1996 发表于 2012-8-12 11:23:16

翻了翻编译器手册,记得看到有优化选项的

GWHBOB 发表于 2012-8-12 11:42:09

哈哈!
有512K的ram和4mb的flash
不知道能不能全部开发出来~

孤军奋战 发表于 2013-9-4 03:24:12

看看

孤军奋战 发表于 2013-9-4 03:25:48

怎样才可以看到SD卡里面的TXT文件?
页: [1]
查看完整版本: 9860sdk里关于内外存读取的问题