cnCalc计算器论坛

 找回密码
 注册
搜索
查看: 28616|回复: 28

[fx-9860/9750系列] 【ADD-IN】【机上C编译器】WSC & FVM 1.3 patched(7月15 修复一个bug)

[复制链接]
发表于 2012-7-6 20:26:55 | 显示全部楼层 |阅读模式
计算器程序
程序名称: WSC & FVM
平台: fx-9860GII fx-9860G & Slim 
系统/软件要求: -
版本号: 1.3
类型: 其他 
作者: Wudy
大小(K): 124
更新日期: 2012-07-06
描述: 机上C编译器
已知缺陷: 详见附件文档
源代码: 开源/部分开源
这可能是最后一版了,基本无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移植来的):
DispCap1.bmp

WSC & FVM V1.30.rar (185.49 KB, 下载次数: 648)

评分

参与人数 4金钱 +5 专家 +1 收起 理由
zhs490770 + 1
diameter + 3 优秀文章
yangsc825 + 1 我很赞同
croptree + 1 谢谢分享

查看全部评分

发表于 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?
 楼主| 发表于 2012-7-8 09:22:24 | 显示全部楼层
2# helder7
yes, but i re-write it in C
发表于 2012-7-8 15:36:16 | 显示全部楼层
能操作串口吗?
发表于 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的
 楼主| 发表于 2012-7-15 17:24:29 | 显示全部楼层
本帖最后由 Wudy 于 2012-7-15 17:29 编辑

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

float不转int,是新版一个改动的错误。。感谢反馈!正在修复
(旧版没这个错吧?)
 楼主| 发表于 2012-7-15 18:04:55 | 显示全部楼层
bug已经修复,请大家重新下载!
发表于 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 "&"
发表于 2012-8-10 19:53:00 | 显示全部楼层
觉得有些地方可以改进比如stepFVM函数部分
是否可以改成:
stepResult stepFVM( void ){
    unsigned register char char *p=BC[R[$PC]];
        switch( *p )
        {
                case opLA:
                        memcpy( &temp, p+2, sizeof(int) );
                        R[*(p+1)] = temp + R[*(p+6)];
                        R[$PC] += 7;                        break;
                case opSTL:
                        .............
              BC[R[$PC]]应该为间接寻址方式,替换掉应该会快些
因为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[BC[R[$PC]+7]];
                                换到这里
                                }
以及getkey函数被调用的地方,都可以提高程序的运行速度

interrupt函数中出现多次
RAM+R[$IA]表达式
几乎每个case下都有,甚至一个case下出现多次,可以提前p=RAM+R[$IA];可以减少加法运算次数
发表于 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
 楼主| 发表于 2012-8-10 20:22:33 | 显示全部楼层
测试强制退出不能只在某个指令里测试,这样不能及时退出。
其他都比较可行。
我觉得你可以自己把这些想法都实践起来,然后测试一下,发布一个极速版FVM,有问题可以来问我。
发表于 2012-8-17 09:17:27 | 显示全部楼层
本帖最后由 13957233150 于 2012-8-17 12:16 编辑

"WSCLIB"is not lib怎么办
 楼主| 发表于 2012-8-17 15:16:20 | 显示全部楼层
"WSCLIB"is not lib怎么办
13957233150 发表于 2012-8-17 09:17

不要
#include <WSCLIB>

#include <stdio.h>
发表于 2012-9-7 22:17:03 | 显示全部楼层
准备放出SOC#
发表于 2012-9-19 21:46:56 | 显示全部楼层
bug报告:使用char数组时内存溢出。和局部变量混在一起了。后来改成int时也抽过一次,但再次运行有好了。
发表于 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)
发表于 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内容为空
发表于 2013-4-19 04:33:16 | 显示全部楼层
。。。。。。。。
发表于 2013-4-19 04:33:43 | 显示全部楼层
大大大大大大大大大
发表于 2013-4-20 20:18:15 | 显示全部楼层
我验证了一下将部分switch结构变成函数指针数组的形式,速度可以的到提升,比如stepResult stepFVM( void )函数体完全用函数指针数组的形式代替,然后编写了一段纯加减运算的循环体,上万次的加减运算,速度比原来的速度快了40%
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cnCalc计算器论坛

GMT+8, 2024-3-28 20:52 , Processed in 0.082656 second(s), 30 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表