
-----------------
2013年1月1日 晚上8:56
    数组下标可以是有符号数了，编译器自动转换为无符号数再参与地址偏移运算；

-----------------
2013年1月2日 晚上7:39
    今天费老大劲增加了一个特性：常量不仅限于数字形式，也可以用表达式定义，如：

N8 D = A NUM 12 + 34 * 56，

这样也实现了中断地址的计算，现在可以把红外线接收器接到任意一个中断引脚，编译器自动计算中断地址；

-----------------
2013年1月4日 下午4:59
    设计双通道的波表合成器时候(电子音乐), 修改编译器,把数组中的常量也可以是表达式形式,
以后顺带把中断地址设计成可以直接用表达式,因为常量表达式引擎是通用的,
只要是用到常量的地方都可以升级为常量表达式.

晚上10:52
    数组长度也可以用常量表达式定义了,不仅限于直接数字常量;
晚上11:24
    中断地址可以为常量表达式,不仅限于数字常量,
    常量表达式中也可以用成员引用了,不仅限于内部常量,

....好累啊....

-----------------
2013年1月11日 下午6:46
    加上了一个音乐相关的窗体,可以设置音色等,下午加了一个钢琴键盘的界面,用户可以鼠标点击弹钢琴,
下一步是设计自动记录用户的点击数据,生成音乐谱表,可以在单片机中播放出来,双通道;

---------------------------------------------------------------
2013年1月12日 晚上7:15
设计双通道的波表合成器,用传递引用实现一个函数处理两个通道,发现一个问题:

//---------------------------------------------------
//解释执行音乐宏指令
T decode: Z8 c: [CODE N8*?] music_list0: BASE N16 index0: BASE N8 time0: BASE N8 tick_ms0
T is_play0 = YES,
repeat
	...

上面忘了加 CODE,导致寻址不对,发不出声音.找了半天才找到原因. 等有空了加上引用指向的类型兼容判断;

---------------------------------------------------------------
2013年1月14日 半夜0:14
    改正了两个地方: 一是第一次打开英文文件时无法着色,因为启动加载默认语言时覆盖了原来的文本设置;
......好乱啊.........反正已经改正了....第二个地方是加快了下载预处理的速度,几乎是瞬间就处理完
(用MP3播放器程序试验),原因是原来用字符串,现在改成了StringBuilder; 刚才把电子琴的键盘改为85个键,
这样中音部分正好在中间,音域也变宽了...睡觉了...     下午帮郝雪洁弄毕设

---------------------------------------------------------------
2013年1月19日 晚上10:07
    晚上给编译器的工具栏添加了一个小眼睛效果,当鼠标移到控制栏上就是普通的控制按钮;当鼠标移开的
时候就会显示一个小眼睛,还会一眨一眨的...很好

    晚上帮邻居修电脑上网,刚刚送过来一碗饺子,好温暖....

    今天是腊八节.


=================================================================================
2013年2月1日

    坐火车回家过年了...


---------------------------------------------------------------
2013年2月7日 晚上10:11
    今天开始设计非抢占式操作系统,现在可以在多层函数调用中直接退出某个事件,下次在跳出点
重新进入;

---------------------------------------------------------------
2013年2月10日 晚上8:10
    大年初一... 今天把调度器改成正式的,仿照以前的OS代码,但是不稳定,折腾好几天...现在终于
没问题了,下一步是考虑下自动确定存储区大小,包括堆栈等,还有事件数目...再把操作系统提取
出来,放到库函数中.现在临时写了一个非软件的延时函数,可以运行.

---------------------------------------------------------------
2013年2月15日 上午 10:48
    今天过年初六, 这几天一直设计协作式操作系统,在开关中断这里~~~ 纠结好几天

	//---------------------------------------------------
	//[i] function delay_ms,
	public V delay_ms: N16 t
	time_list (OS current_task_index) = t,
	enable_list (OS current_task_index) = 1,
	T ok = NO,
	repeat until ok,
		OS schedule,
		ok = enable_list (OS current_task_index) == 0,
		...
	
	//repeat until enable_list (OS current_task_index) == 0,
	//	OS schedule,
	//	...	
	//#asm "CLI"
	//time_list 0 = t,
	//enable_list 0 = 1,
	//#asm "SEI"
	end.

下边的写法不加中断就会有问题,....好好检查下原因; 系统调度函数:

	//---------------------------------------------------
	V schedule
		#asm "PUSH R28"
		#asm "PUSH R29"
		
		//1800
		//#asm "LDI R28,7"
		//#asm "LDI R29,7"
		//SP = 1900,
		
		#asm "CLI"
		app_TCB current_task_index sp = SP,
		//#asm "SEI"
		
		current_task_index + 1,
		current_task_index % T_NUMBER,
		
		#asm "CLI"
		SP = app_TCB current_task_index sp,
		#asm "SEI"
		
		#asm "POP R29"
		#asm "POP R28"
		#asm "RET"
	end.

    一开始只要调度就会出错.加上中断之后可以调度了,然后延时函数不能用数组只能
单个延时,今天注释了第二个内嵌汇编语句(屏蔽中断)就可以多进程延时了....
    好好检查一下原因,到目前为止总算是可以稳定运行了.


---------------------------------------------------------------
2013年2月16日 晚上10:17

# 设置堆栈 $start $length//

在设置堆栈中加上了堆栈长度,并且把SP指向这个堆栈区的终点,然后在中断保护现场
和恢复现场中把SP也保存恢复... 测试通过.

2月17日 上午 10:27 经过测试发现不必在调度时关中断也行

上午 11:07 而且这种写法也行了:

repeat until enable_list (OS current_task_index) == 0,
	OS schedule,
	...		

---------------------------------------------------------------
2013年2月17日 晚上8:03
测试每个组件的程序,发现双通道音频播放(播放<<雨的印记>>钢琴曲)死机了...
最后折腾半天,晚上终于发现这里(在设置堆栈指令中):

if( Cut[ i ].StartsWith( "设置堆栈 " ) ) {
	....
	Cut[ i ] = Sence[ 0 ] + " " + StartAddr + " " + ( Length - 1 );

把长度减去1....这样SP真正指向堆栈的底端,不会越界,
不减1的话可能会干扰第一个静态变量

---------------------------------------------------------------
2013年2月18日 下午 2:30
把操作系统的内核驱动处理成动态的,以前是静态代码列表,现在是用进程数组,
可以动态添加内核驱动,这样操作系统的结构就比较完整了.

-----------------------
下午 5:13 用双通道音频播放测试出错, 最后这里改了下
(编译器自动生成的中断函数恢复现场代码):

# 恢复现场//
pop r27
pop r26
CLI
STS 0x5D,r26
STS 0x5E,r27
;SEI 不要开中断!!
pop r31
out 0x3f,r31
pop r31
pop r30
pop r29
pop r28
pop r27
pop r26
pop r25
pop r24
pop r23
pop r22
pop r1
pop r0

上面去掉了SEI指令,因为中断返回用RETI也可以开中断,现在改正后没问题了.
原因应该是在定时器中断里运行内核驱动时又被音频解码中断,导致回到内核驱动后
已经有了下一个定时器中断,然后在恢复现场返回时开中断导致立刻重入,
而实际上这次的中断还没有完全退出.....好乱啊....现在测试没问题了..

-------------------------------------------------------------------------
2013年2月26日 下午6:23

发现一个BUG: 有时无法打开文件对话框,然后把这句代码放到FormLoad事件中就行:

Application.EnableVisualStyles();

以前是放在 C# 的 main 函数里的, 不知道为什么....

  (2013年3月7日下午 4:58补充: 原来是电脑中了病毒, 下了一个杀毒软件就正常了)

------------------------------
2013年2月27日 晚上 11:04
    整理组件库驱动, 发现一个BUG:居然不能向有符号数组赋值.. 改了下写接口,
现在改正了, 而且也可以定义bool类型的数组了...

------------------------------
2013年3月1日 下午 4:19
    现在可以写入熔丝了.. 刚开始随便写了段代码,结果无法设置熔丝,而且还把芯片
锁住了. 然后对照 USBhound 抓取 progisp1.6.7 的USB数据才明白..
现在软件就完善了,不再需要任何其他的软件: 编写程序, 编译成HEX, 读写熔丝, 下载.

    (备注:昨晚上把内嵌调度器改成了带有沙箱机制,用户进程可以退出,系统自动重启
退出的进程, 这两天在天津, 在廊坊高铁站等车时想过这个问题,现在终于实现了)

------------------------------
2013年3月5日 晚上 10:13
    今天整整忙了一天终于把AVR的32位变量(有符号数和无符号数)的运算补全了,
包括乘除法,并且把运算库独立出来,避免每个语句都生成一大堆的汇编...
暂时没有整数的取余运算因为不好确定符号,等参考下C#的处理方式
再设计.现在编译器已经基本完善了,剩下的就是把组件库好好整理下...
在用户层面全部采用32位有符号数.

    现在汇编运算库比较规范了..明天再继续把剩下的处理完.

    好累..睡觉..

------------------------------
2013年3月7日下午 4:53
    上午把汇编运算库全部规范化, 下午开始整理组件库,先把事件设计成独立空间的,
即使是同一个组件中的每个事件也具有独立的进程空间; 然后改了下组件配置器,
可以设置组件的对应每个语言的名字,以前是只有一个英文名. 而且用户拖进来
一个新组件时会根据默认语言设置合适的名称,而以前是每次拖进来一个组件都要
修改一下名字,比如把 MEGA32_11MHZ 修改成 控制器, 很麻烦, 现在可以自动设置了.

------------------------------
2013年3月8日下午 2:30
    给组件配置器增加了防护措施, 可以添加语言并修改, 增加了文件修改保存提示.

------------------------------
2013年3月14日
    发现一个重大BUG: 昨天调试T1播放音频,但是有杂音...搞得最后崩溃了放弃...
今晚上不死心继续检查, 终于发现这里(被操作系统定时器中断干扰了):

	//---------------------------------------------------
	//中断服务函数,注意刚开始不允许中断,如果被中断(串口等)
	//延时后下一个tick可能已经来临从而重新进入这里,造成覆盖.
	interrupt [MCU WATCH timer0_comp]
	V TimerTick
		MCU TIMSK & 0b1111_1101,
		//MCU TIFR | 0b0000_0010,
		MCU TIFR = 0b0000_0010,
		#asm "SEI"
		
		//遍历组件驱动列表,逐个运行
		RunDriverList,
		
		#asm "CLI"
		MCU TIMSK | 0b0000_0010,
	end.

第二行代码注释掉了: //MCU TIFR | 0b0000_0010, 应该直接赋值, 不应该或运算,
因为或运算会清掉其他一切发生的定时器中断...难怪以前不稳定(红外线解码等)..
但愿是这个原因...让人抓狂啊.....

------------------------------
2013年3月15日
1 内嵌汇编中遇到未分配空间的变量时自动分配变量,再进行访问(以前是直接报错);
2 刚才改了两个关键的地方:在 Parse.cs 中默认引用不加 Base 前缀,另外在
Expression.cs 中处理"引用运算"时不再判断是否指向引用的引用,而是直接赋值...
这个问题需要好好考虑下... 看看是否确实是这样.
因为多个连续嵌套的引用,改变第一个指向时,显然和其他后续的引用无关,------>
而以前能正确编译程序是因为这两个错误和到一块又没错了,绝对让人崩溃......

------------------------------
2013年3月23日 半夜 0:01
    又改回来了...parse.cs 中的BASE前缀... 以后要好好整理下类型系统.
今天设计图形引擎, 晚上写了一个俄罗斯方块,目前还不能消行.改进了好多界面部分,
增加了组件连接用于图形库底层驱动配置;把 g 的SmoothMode属性设置为高质量,...
效果不错啊啊,一点都看不出来锯齿.  先睡觉了...

    主要是测试图形库引擎(结构体数组,引用等等...)

------------------------------
2013年3月25日 半夜 0:10
    昨晚上半夜3点钟才睡觉...今天不能再熬夜了...今天把点阵转换器的取模方式弄好了,
一共有8种,测试通过,其中第7种显示的顺序和液晶一致..........睡觉去了.....
在液晶屏上显示了几个字: "中国·凌梦" 还可以设置字体...明天的任务是把字符串的取模
继承到语言本身...这个功能一定很有用...

------------------------------
2013年3月27日 中午12:50
    昨晚上想到一个关键的设计: 把函数调用也处理成空格分隔,类似于数组的访问...
今天上午实现了,真不错. 等下午整理下代码,全面测试一下.

(题外话: 总算是...函数调用的格式一直是一个心病...)


//2013.3.27
//如下,刚才忽然想起一个重要的设计: 用空格分隔函数调用的参数...
//如果参数为数组等,需要用小括号括起来...   试试...

V 控制器_系统启动事件
	图形引擎 显示 "#中国·凌梦" 0 0,
	
	如果 test 34 45, 图形引擎 显示 "#哇塞..." ((Z)12 + 34) ((Z)10 + 10).
	
	图形引擎 显示 文字 0 40,
结束.

[CODE N8*?] 文字 = "#灵动编程",

T test: N8 z: N8 xx
	返回 z == 34,
结束.

V testA: N8 z: N8 xx
	z = 34,
结束.

------------------------------
2013年3月28日 晚上 10:41
    今天把函数的定义改了下,初步支持复合定义,形参可以在函数名的中间,
一个函数有多个分量名字. 如

延时器 延时 3 秒,

其中 "延时" 和 "秒" 都是这个延时函数的名字分量,而形参在中间,这样看上去更自然
而以前是这样(类似C语言):

延时器 延时秒数( 3 );

目前还是依靠函数名的第一个分量进行识别, 明天完善一下...

------------------------------
2013年3月29日 中午 12:42
    允许函数的第一个(或其他)名字相同.因为进行函数调用匹配时是依次扫描全部分量的.
晚上 9:33
    修改词法分析,支持字符串的字体,大小和粗体斜体下划线等说明,内置取模功能OK,如下:

"飞翔,梦"(宋体,13,BIUS) 编译器自动把这段字符按照指定字体进行点阵取模

------编译器的源代码总行数刚刚超过了四万行, 写了4年-------

------------------------------
2013年4月6日 下午 2:48
    把组件库改成自定义路径,用一个记事本保存组件的关系,映射到实际的组件库文件路径,
现在基本功能实现了,而且组件库列表是中文的,方便使用.
(以前是直接导入组件库的目录,找到某个组件很费劲,还有好多内部文件...非常乱)

------------------------------
2013年4月9日 晚上 8:35
    把组件库浏览器设计好了,可以显示选中组件的功能说明. 基本就告一段落了...
23:06
    晚上粗略写了一份语法说明添加到输出信息框，现在是 编译信息、错误信息和语法说明
发现一个重要性质：RichTextBox要想显示出rtf，需要先把它添加到目标控件上，然后再
装载文字、设置属性等，（注意不能最后添加，否则显示不出rtf效果）

-------------------------------------------------
2013年6月6日 下午 4:46
    荒废了一个月~~~ 今天开始打好精神，调试舵机驱动部分，发现居然不能工作了！
调试半天就是不行，代码逐行比较了~~~ 最后用2012年版本的编译器可以编译正确运行，
下午集中精力找原因，发现是底层汇编运算库有BUG，刚才分段更新汇编运算库，
终于发现这里：

# >_bool_uint8_uint8 $a0 $b0 $c0 $va $vb $vc//uint8-大于

ldd_$vb r20,$b0
ldd_$vc r24,$c0

ser r27
sub r24,r20
brlo @label1
clr r30
@label1:

std_$va $a0,r30

应该是 ser r30，忘了改过来~~~~ 

刚才检查下其他地方，居然发现好几个类似的错误~~~~  太马虎了！看来那个错误扫描程序
需要完善一下了……

-------------------------------------------------
2013年6月16日 下午 5:59
    调试多通道舵机驱动程序,用MEGA8实现,现在支持rjmp指令了,通过给中断入口
加一个rjmp跳转序列,可以支持MEGA8的中断编写.实际的中断跳转仍然用ljmp
实现,因为rjmp不能跳到MEGA8的全部空间; (整整研究了一天~~~)


-------------------------------------------------
2013年6月23日 下午 6:40
    在图形界面加上了勿带电插拔提示,当用户新建一个空的文件时就会出现这个提示.

-------------------------------------------------
2013年7月6日 下午 4:17
    今天去学校调试Win7驱动,终于解决了一个重大问题,Win7的兼容性,现在软件也可以在
Win7系统中(32位和64位)下载了,而且那个电子琴插件在64位下也可以工作,不错啊.

    刚才修正了编译器的一个BUG,就是 Z8 -> BASE Z32 赋值时无法转换,在编译器内核
的表达式处理中加了一个隐式转换就好了.

-------------------------------------------------
2013年7月7日 上午 10:13
    + 修正了H595等虚拟端口的访问,在汇编库添加了 传递形参_bit_uint8 解决;
    + 增加了CHANGE修改形参,方式是在形参后边加上 *,如 Z32 重心*

-------------------------------------------------
2013年7月8日 中午 12:56
    增加了模块占用资源提示,每个模块添加了"资源占用"属性,在图形界面中检测资源
占用冲突,并给出提示;

-------------------------------------------------
2013年7月9日 中午 12:02
    上午把串口调试插件修改完善了,可以字符串,数字方式发送显示,增加了定时发送,
调整了编译器的界面,把所有的按钮等元素改成平面化的.

-------------------------------------------------
2013年7月18日 中午 12:47
    上午调试音乐编谱插件,加上了每小节音符时值,然后输入了一首歌曲测试
(边疆的泉水清又纯) 然后生成代码,点击复制按钮后关闭了软件,在记事本中就无法粘贴了
郁闷死了~~~~ 输入了好长时间谱子呢...全白做了,真是气死了..........

    调整下情绪,....

    最后总结出这是WindowsXP的一个BUG,有时间测试下Win7中是否还有这个BUG
刚才发现了一个变通的解决办法: 是因为调用了窗体的 visible = false 这个指令,
然后用 Opacity = 0 这个指令代替就行了(设置窗体完全透明,相当于 visible = false)

    现在在软件关闭后,复制的文本依然可以粘贴到其他(如记事本等等),...

-------------------------------------------------
2013年7月19日 中午 12:28
    上午把编谱插件的内部数据表示从文本框改成了数组,这样可以选中之前的某个
音符并修改时值,选中的音符会显示一个高亮框,时值错误的音符会显示红色,效果不错~

-------------------------------------------------
2013年7月22日 晚上 11:27
    修改了编译器的ISP下载部分，下载可以同时支持旧版的下载线和新版的下载线
    把启动界面从原来的黑白色基调改成浅色基调，背景是一个遥控风扇

-------------------------------------------------
2013年7月28日 下午 4:06
    增加了图形界面的自动定位功能,打开自动定位后就不再保存原点相对于屏幕的
偏移量,而是程序自动计算所有组件的边界,得出中心坐标,让全局图显示到屏幕中心

-------------------------------------------------
2013年8月10日 下午 4:10
    增加了一个设置框 用来设置是否生成HEX文件,下载时直接从内存中转移HEX数据到
ISP下载器中.

    开始设计另一个大方向: 电脑/手机客户端图形界面编程,主要思路是在编译器
图形界面拖出若干控件(按钮,文本框,滑动条...)转换成代码参数下载到单片机中,
单片机运行后读取这些参数并和手机客户端通信,在手机上重构出这个图形界面.
这样避免了用户自己编写手机客户端程序,用户只需要一次性安装手机客户端即可,
这个客户端类似于一个浏览器,而单片机电路相当于一个网站.

    上午初步完成了按钮控件,可以拖动和重叠,下一步是设计一个GUI外壳(底层调用
通信管道),把控件事件包装起来.

-------------------------------------------------
2013年8月11日 半夜 0:28
    改正了编译器的一个重要地方:可以直接用 A.XXX 访问变量了,而以前需要先
定义一个指向 A.XXX 的元件才行. 在图形界面中的:

A # REPEAT A # UNTIL A I CP Connected, ...

发现的.

有点碰巧~~~~ 居然可以正常工作了. 系统启动后会等待建立连接,然后初始化
各个控件(目前还没有做),然后进入系统标准事件调度.在等待建立连接时会打开中断

挺好~ 做了一个简易温度计,测试通过.

-------------------------------------------------
2013年8月11日 上午9:57
    调试建立通信,头疼~~~ 一上午也没弄好,串口老是收发丢失.
    上午发现一个BUG:关闭多个文件时有的直接忽略掉,最后发现是用了foreach导致的,
foreach不允许修改元素,最后用一个while循环解决了.以后要注意了.

-------------------------------------------------
2013年8月12日 下午 5:08
    今天把客户端图形控件的事件扫描和参数设置弄好了,可以显示温度,响应按键事件,
但是串口通信不稳定,找了半天,终于发现,原来在串口中断中发送了确认字符,可能导致
其他的串口发送函数发送序列被中断,去掉了这个确认字符就好了,非常稳定.

    昨天下雨,关于图形化编程想到了一个重要设计:界面中带有命令流和数据流,命令流
用脉冲或者闪电表示,每个脉冲可以触发一个数据流.有多种控件用来传输和处理脉冲,
类似于数字电路的脉冲那样.还有每个脉冲需要分配一个进程池,并且后期优化时合并
可以串联的脉冲(调用了延时和等待条件的脉冲需要单独分配进程池).

-------------------------------------------------
2013年8月15日 晚上 9:12
    开始设计图形化编程界面,采用 脉冲流 和 数据流 的思想. 规划:

  1 先增加一个图形变量对象和列表,显示到图形界面中;
  2 图形变量可以设置类型,如整型,字符型,...
  3 可以添加图形变量;
  4 在GUIcoder中解析每个图形变量生成文字形式的变量定义;
  5 ...后续的...

-------------------------------------------------
2013年8月17日 半夜 0:19
    累死了......
    上午去车站接她回学校,好热的天~~~~
今天一直设计Module类,现在是半夜0:21,终于把Module类设计成层次化的,
从一个MyObject中继承到MyFileObject,这样以后可以随意扩充其他的元素,...
浑身乏力......关键的一步今天设计好了,以后就好说了.....睡觉去.

-------------------------------------------------
2013年8月17日 半夜 23:23
今天困在Module类型,怎样生成Control类型,好头疼~~~~
晚上玩了会儿琴,想到从文件中装载的全部生成Module，然后根据配置信息，
再从这个Module生成另一个Control。然后改了下其他兼容地方，居然可以运行了！
终于实现了在同一个图形列表中有不同的模块并且对鼠标事件有不同的响应，
这样就可以调整控件的尺寸了，挺好~

-------------------------------------------------
2013年8月27日 晚上 22:47
    初步增加了图形界面变量,下一步是规范化GVar文件形式,可以动态添加;

-------------------------------------------------
2013年10月1日 上午 10:15
    准备设计图形化编程方案.上午初步加了一个LogicModule.最终目标是
全部采用图形化编程,不再有文本界面了.

-------------------------------------------------
2013年10月13日 半夜 1:33
    貌似解决了一个重大BUG: 软件改成Win7兼容之后(下载程序), 下载线
容易死机,每次都需要重新插拔. 今天从天津回来想这个问题,因为明天要把
下载线给陈邦浩邮过去. 晚上调试了一下,发现用一个网上下载的正版固件,
然后上位机加上了延时就好了,可以连续下载程序. 明天用女朋友笔记本试试
win7系统是否稳定.

-------------------------------------------------
2013年10月21日 晚上 7:55
    这是 linkboy 文字式编程环境 最后一版.以后将会全面改为图形化编程.
今天初步实现了图形化的函数,流程,事件等等,其实这是这些框架是图形化的,
其中的表达式等等还是需要手工文本化输入. 这是最后一版... 意义深刻

-------------------------------------------------
2013年10月21日 晚上 10:38
    初步完成了图形化流程图,目前还不能生成代码,刚才发现处理判断语句
这里需要实现向下跳转的 goto 语句,而目前的编译器版本不支持.
明天先实现完整版goto语句,然后再实现流程图的代码化,基本上就OK了.
感觉今天设计了好多,进度好快~~~

    昨天还头疼呢,一直在想自从有了女朋友,这个软件就基本没什么时间写了,
然后想到以后肯定也会越来越没时间写了,思维等等也都会渐渐生疏,
也许就彻底放弃了, 好可怕~~~ 感觉自己都很难融进自己设计的东西中......

    今天有这么大进度,看来自己的担心是有些多余了.

-------------------------------------------------
2013年10月22日 晚上 10:23
    上午把goto语句处理好了,可以任意方向跳转,下午实现了基础的图形编程,
晚上设计了一个计时器,彩色切换灯,可以正常工作.

    晚上考虑曲线连接时,想到一个非常好玩的设计: 每个模块带有一个平衡桥,
或者是平衡角,还有一个最佳平衡角.根据前后组件的相对位置可以计算出
最佳平衡角,然后有一个定时器使得当前平衡角不断向最佳平衡角靠近,一定
非常好玩!!! 视觉上的效果就是拖动模块时,各个模块之间的连接曲线会自动
变形,最后稳定到一个平滑的状态上.

-------------------------------------------------
2013年10月31日 晚上 11:19
    这两天写了好多,今晚上把图形化编程的主体设计好了,主要调试调度器,
可以动态添加事件处理代码,可以在各个事件中随意跳转,并且可以用分支器
实现多路同步触发,基本上就设计好了,剩下的就是一些界面上的细节了...

-------------------------------------------------
2013年11月22日 上午9:09
    增加了一个新特性,把软件改成单一实例模式,这样每次只能打开一个界面,
打开多个程序文件的话会自动添加到现有的界面中,而不会重新启动一个软件,
这样一是节省时间,二是防止文件访问冲突,因为系统保存的是最后一个退出
的软件,导致一些设置丢失,如近期文件列表等;

    但是目前有一个问题:打开一个新文件,无法让原先的界面激活,只能在任务栏
闪烁,需要点击一下才能激活;

-------------------------------------------------
2013年11月24日 晚上11:25
    在天津...这两天把表达式的树形图显示做好了,可以层次化显示表达式;
下一步是设计表达式的编辑(图形化界面编辑)

(补充: 觉得应该记录编译器图形界面的进展,用截图加日期的形式,单独放在一个
文件夹中. 刚才开始记录第一个版本,有空把之前的图形界面整理下,以后坚持记录)

-------------------------------------------------
2013年11月26日 早上8:16
    昨晚上，忽然就想到一个好点子
（其实昨天白天就想到一点，就是那些配置元件如液晶屏，配置连接不再指向实际的组件，
而是指向引用，主要是由485控制板想到了，因为串口和控制点都在控制板上，
如果全指向模块的话都是一条线，重合了，看不准）

昨晚想到的是，对于数据分解器（进制分解），不设计成动态的
（其实以前都打算放弃这个特性了，数据流不用图形化）

但是仍然是图形化，静态的，把输入端口和输出端口连接到静态常量上
（也是引用，而不连接到定义的变量上）
然后在脉冲流中控制调用数据流节点中的函数（也是引用），
注意，引用！！！全部用引用！除了硬件电路连接线直接是在模块上连接，
其他的连接都用引用！也就是说可以在多处使用。

-------------------------------------------------
2013年11月29日 晚上9:19
    给硬件图形模块的连接点加上了方向识别,不再是一律向右,而是根据方向信息
绘制不同的端口名称效果.

-------------------------------------------------
2013年12月11日 晚上11:39
    今天一天设计鼠标右键选中多个组件的功能, 这段时间第一次这么专心写程序, 不错!
现在左键移动组件,右键选中多个组件,可以同时拖动; 下一步是设计图形化的组件菜单,
在组件选中时显示出来,可以同时显示多个选中的组件,然后就是设计表达式的菜单编辑功能了.

-------------------------------------------------
2013年12月13日 晚上11:39
    今天把组件的图形化下拉菜单设计好了,主要是硬件模块的删除,旋转,事件,参数等等.
下一步是设计逻辑类组件的下拉菜单,主要是表达式的图形化编辑,这个是要重点解决的问题.

-------------------------------------------------
2013年12月14日 晚上11:45
    今天把表达式的图形化编辑初步设计了一下,可以显示结构图,鼠标移动到每个元素上边时候
会高亮显示. 点击元素之后会变成 "?", 但是尺寸还没有处理, 下一步是把表达式的编辑功能
完善好, 增加智能感知列表里的组件函数名自动补全, 基本就差不多了.

-------------------------------------------------
2013年12月15日 晚上10:38
    晚上设计表达式元素集合类,包括函数名列表,运算符列表等等,点击可以添加到表达式中.

-------------------------------------------------
2013年12月17日 半夜 0:25
    好累!!! 今天把图形化表达式,运算符处理好了,还有自动代码补全,以前是从编译器中
提取信息,今晚上改为从组件库组件配置列表中提取,这样不需要启动预编译线程就可以.
每次启动预编译都会界面变卡.现在好了.  晚上设计组件到事件的虚线连接,终于弄好了,真累...

    睡觉去... 这几天基本把图形化开发环境的核心做好了... 进展好大!

-------------------------------------------------
2013年12月20日 晚上 7:07
    昨天和今天设计图形化变量的编辑功能,拖进来图标常量和音乐常量,可以直接图形化编辑,
然后保存到图形界面配置数据中.刚才把组件库整理了一下,去掉了全部的 port.B 组件,因为
基本没什么用,然后把组件库列表修改下,可以在一个界面中显示多种组件,方便选择.

-------------------------------------------------
2013年12月20日 半夜 0:36
    把软件启动界面改了下,不再显示文件路径,只在鼠标经过时显示,并且用一个红色渐暗拖尾
的画框圈起来,其实全部都用win控件实现,效果不错~~~

-------------------------------------------------
2013年12月23日 下午
    这两天把引擎库的接口设计好了,可以设计软件组件链接到现有的硬件设备上,显示一个折线效果.
设计了一个文本显示引擎,用LCD1602测试通过. 另外发现了1602检测忙信号的一个BUG,现在可以硬件
检测了(以前是软件延时代替),清屏速度比以前快多了,不错.

    下午把组件库的说明(鼠标移到组件上)显示成彩色的,以前是全白色,今天把说明信息拆分开,
这样可以用不同的颜色显示,更清楚了. 关键是用到了 MearsurString 的一个重载函数,根据给定的
宽度计算出字符串的高度.

-------------------------------------------------
2013年12月23日 晚上 11:27
    忙了大半夜终于把组件说明信息的彩色文字显示弄好了,当信息过多时会显示一个滚动条;另外
信息界面的调出不再是点击说明按钮,而是鼠标移到说明按钮上就会自动出现,鼠标移出后界面自动消失.

-------------------------------------------------
2013年12月24日 上午 10:55
    设计了文本框控件,把组件面板的名称按钮和参数按钮都改成文本框形式,可以直接输入文字.
目前设计的这个文本框还只是基本的,只能获取焦点输入文字,不能通过鼠标点击选中某一段文字.

-------------------------------------------------
2013年12月25日 晚上 6:47
    今天把组件配置器改了下, 以前的版本不稳定, 经常有的描述信息丢失, 今天检查改正了, 可以
任意添加成员列表, 系统自动匹配以前的描述信息.

    正在设计 ThreadLogic 的多端口模式, 现在不只限于两个线程了, 可以动态设置线程数...

-------------------------------------------------
2013年12月26日 晚上 7:27
    整整调试了一天!终于又把图形控件的建立通信和事件触发调试好了,... 刚才把时间扫描标志
改为N8类型,每个位表示一个事件,这样可以和图形控件的事件触发结合起来,测试通过!

-------------------------------------------------
2013年12月27日 晚上 9:43
    昨晚上, 11点钟开始整理编译器内核,试了一下标准C语言的函数调用,临时用f{}表示,居然可以了.
今天忙了一天,终于把编译器内核编程语言语法重新改为了标准C语言的形式,包括if语句,大括号语句,
点运算,还有刚刚完成的下标运算,变量类型 uint int 等全部改回来了...本以为需要好好花些时间呢,
没想到只用了一天! 还改了一个小小的地方(但是非常有用),就是变量返回时修改了位置索引,
这样一个变量处理出错时会定位到真正使用的点,而不是定义的点.

    主要处理的一个地方是函数的调用,重新改为了以前的C语言定义和调用,不过仍然兼容目前的形式:

延时器 延时 3 秒;

这个函数调用将会被图形界面解析为:

延时器 延时_?_秒 ( 3 );

   完全能兼容以前的中文指令调用格式,非常好!

-------------------------------------------------
2013年12月29日 中午 12:07
    上午把语法修改下,根目录为 #,一些相关的系统指令都改为 #??? 的形式.

-------------------------------------------------
2013年12月31日 上午 9:59
    昨天把音乐解码器独立出来,可以在电脑MIDI播放音乐,也可以在单片机上播放,今天上午把串口通信
协议加上了自动复位功能,当控制板正在运行的时候打开上位机软件会触发控制板复位,重新建立连接.
    




