Wudy 发表于 2012-7-6 20:26:55

【ADD-IN】【机上C编译器】WSC & FVM 1.3 patched(7月15 修复一个bug)

这可能是最后一版了,基本无bug。主要加了几个函数,修复一个优化错误。

7月15日之前下载的人请重新下载!!

更新
* 2012 – 07 – 15                  version 1.3 patched
- 修复int参数不会自动转换为float的错误(感谢chuxianbing的反馈)


* 2012 – 07 – 06                  version 1.3
- 添加超频、RTC、文件寻找、执行FVM程序的函数
(函数名分别是 cpuspeed, readrtc, setrtc, findfirst, findnext, findclose, exefvm, getfvmmsg )
- 添加位操作函数(为实现方便,弄成函数形式而不是操作符)
(函数名分别是 bitand, bitor, bitxor, bitnot, shiftl, shiftr)
- 添加16进制常数的支持
- 添加IO界面大字体的支持(见Tips)
- 优化FVM的源代码(感谢chuxianbing的指导)
- 修复优化技术的一些错误
- 取消自动初始化随机数种子(因为有时间函数了)
- 其它

时钟(从mcl-malical移植来的):


helder7 发表于 2012-7-8 02:56:33

本帖最后由 helder7 于 2012-7-8 02:57 编辑

good! i updated the documentation in wiki to version 1.2...and i started translate docs to 1.3

about the version (1.3) i need some help to translate the latest new library e theses:

int findfirst( char *pathname, int *handle, char *foundname, int *fileinfo )
int findnext( int handle, char *foundname, int *fileinfo )
int findclose( int handle )
void cpuspeed( int multiple )
void resetcalc( void )
[...] [...] [...] etc .... jump...
char *getfvmmsg( void )

this clock is the malical clock, right?

Wudy 发表于 2012-7-8 09:22:24

2# helder7
yes, but i re-write it in C

cnzym 发表于 2012-7-8 15:36:16

能操作串口吗?

chuxianbing 发表于 2012-7-15 15:20:09

int i;
float j;
i=100;
j=0
while (i)
{
j=j+sin(i);
}
这段程序好像运行有错
while(i) 要写成while(i>0)
sin(i)好像也有问题,i为整数,sin函数只认float,对整数不会自动转换为float的

Wudy 发表于 2012-7-15 17:24:29

本帖最后由 Wudy 于 2012-7-15 17:29 编辑

5# chuxianbing
while i,我测试没有问题

float不转int,是新版一个改动的错误。。感谢反馈!正在修复
(旧版没这个错吧?)

Wudy 发表于 2012-7-15 18:04:55

bug已经修复,请大家重新下载!

helder7 发表于 2012-7-22 08:33:44

本帖最后由 helder7 于 2012-7-22 08:37 编辑

hello wudy!

a casio-scene member hugh (reckon developer) asked you about the possibility of add:

operators "<<" and ">>"
binary "&"

chuxianbing 发表于 2012-8-10 19:53:00

觉得有些地方可以改进比如stepFVM函数部分
是否可以改成:
stepResult stepFVM( void ){
    unsigned register char char *p=BC];
        switch( *p )
        {
                case opLA:
                        memcpy( &temp, p+2, sizeof(int) );
                        R[*(p+1)] = temp + R[*(p+6)];
                        R[$PC] += 7;                        break;
                case opSTL:
                        .............
            BC]应该为间接寻址方式,替换掉应该会快些
因为stepFVM函数只在一个地方被调用,而且stepFVM函数被非常频繁地调用,所以是否可以将stepFVM函数直接给取消掉,将函数体整合到fvm函数的主循环中,减少push和pop参数的指令的时间
还有 if( forceBreak && IsKeyDown(KEY_CTRL_F1) && IsKeyDown(KEY_CTRL_F2)
                        && IsKeyDown(KEY_CTRL_F6) )这一句被执行的次数会很多,是否可以换一个位置,比如换到循环条件判断指令的位置,比如:
               case opCJ:
                  .
                  .
                                                   if( ok )
                                {
                                        memcpy( &temp, BC+R[$PC]+3, sizeof(int) );
                                        R[$PC] = temp + R+7]];
                                换到这里
                              }
以及getkey函数被调用的地方,都可以提高程序的运行速度

interrupt函数中出现多次
RAM+R[$IA]表达式
几乎每个case下都有,甚至一个case下出现多次,可以提前p=RAM+R[$IA];可以减少加法运算次数

chuxianbing 发表于 2012-8-10 20:14:13

还有可以改进一下openfile 等函数
比如:
char *d="c:\\g\\ab.txt";\\表示 fls0
char *d="d:\\g\\m.txt"; \\d:表示sd卡
可以直接 h=openfile(”c:\\1.txt);
handle=openfile(d);   \\第二个参数直接省略掉,表示 _OPENMODE_READWRITE_SHARE

Wudy 发表于 2012-8-10 20:22:33

测试强制退出不能只在某个指令里测试,这样不能及时退出。
其他都比较可行。
我觉得你可以自己把这些想法都实践起来,然后测试一下,发布一个极速版FVM,有问题可以来问我。

13957233150 发表于 2012-8-17 09:17:27

本帖最后由 13957233150 于 2012-8-17 12:16 编辑

"WSCLIB"is not lib怎么办

Wudy 发表于 2012-8-17 15:16:20

"WSCLIB"is not lib怎么办
13957233150 发表于 2012-8-17 09:17 http://www.cncalc.org/images/common/back.gif
不要
#include <WSCLIB>

#include <stdio.h>

imath 发表于 2012-9-7 22:17:03

准备放出SOC#

GWHBOB 发表于 2012-9-19 21:46:56

bug报告:使用char数组时内存溢出。和局部变量混在一起了。后来改成int时也抽过一次,但再次运行有好了。

DAS 发表于 2013-4-1 22:24:52

helder7 发表于 2012-7-22 08:33
hello wudy!

a casio-scene member hugh (reckon developer) asked you about the possibility of add:
...

They don't bird u......welcome to china man's calc website!(maybe there was some syntax error)

chuxianbing 发表于 2013-4-14 20:11:07

printf("xp=\n");
printf("yp=\n");
时显示为:
xp=
xp=
不知道是什么原因造成的

scanf("%s",t);语句直接按回车时,字符串不为空,结果不确定
希望scanf("%f",x);语句直接按回车时x保持原值不变
像scanf("%s",s);语句直接回车是s内容为空

Hyper-Assembler 发表于 2013-4-19 04:33:16

。。。。。。。。

Hyper-Assembler 发表于 2013-4-19 04:33:43

大大大大大大大大大

chuxianbing 发表于 2013-4-20 20:18:15

我验证了一下将部分switch结构变成函数指针数组的形式,速度可以的到提升,比如stepResult stepFVM( void )函数体完全用函数指针数组的形式代替,然后编写了一段纯加减运算的循环体,上万次的加减运算,速度比原来的速度快了40%
页: [1] 2
查看完整版本: 【ADD-IN】【机上C编译器】WSC & FVM 1.3 patched(7月15 修复一个bug)