【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: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? 2# helder7
yes, but i re-write it in C 能操作串口吗? 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:29 编辑
5# chuxianbing
while i,我测试没有问题
float不转int,是新版一个改动的错误。。感谢反馈!正在修复
(旧版没这个错吧?) bug已经修复,请大家重新下载! 本帖最后由 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 "&" 觉得有些地方可以改进比如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];可以减少加法运算次数 还有可以改进一下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 测试强制退出不能只在某个指令里测试,这样不能及时退出。
其他都比较可行。
我觉得你可以自己把这些想法都实践起来,然后测试一下,发布一个极速版FVM,有问题可以来问我。 本帖最后由 13957233150 于 2012-8-17 12:16 编辑
"WSCLIB"is not lib怎么办 "WSCLIB"is not lib怎么办
13957233150 发表于 2012-8-17 09:17 http://www.cncalc.org/images/common/back.gif
不要
#include <WSCLIB>
要
#include <stdio.h> 准备放出SOC# bug报告:使用char数组时内存溢出。和局部变量混在一起了。后来改成int时也抽过一次,但再次运行有好了。 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) printf("xp=\n");
printf("yp=\n");
时显示为:
xp=
xp=
不知道是什么原因造成的
scanf("%s",t);语句直接按回车时,字符串不为空,结果不确定
希望scanf("%f",x);语句直接按回车时x保持原值不变
像scanf("%s",s);语句直接回车是s内容为空
。。。。。。。。 大大大大大大大大大 我验证了一下将部分switch结构变成函数指针数组的形式,速度可以的到提升,比如stepResult stepFVM( void )函数体完全用函数指针数组的形式代替,然后编写了一段纯加减运算的循环体,上万次的加减运算,速度比原来的速度快了40%
页:
[1]
2