我很无语...c#到底是什么一门语言?!help me!

someoneelse   2009-7-22 10:51 楼主
现在串口丢失数据问题解决了,
但是又迎来了一个新问题。
就是一旦运行某些c#程序,我的串口立即乱码。
经过多次实践证实,这个c#根本和串口一点关系都没有。根本没有打开操作串口的部分。
怎么会这样,


——————————————————————————
上面的现象证实了这个c#一旦运行,我的2440 PDA 外部串口的波特率寄存器就被意外修改了

但是据我所知,这个c#是不能直接操作硬件的?!
我不懂c#,我问应用的他们说c#内存不像C++ ,内存是自动回收的,
这次这个问题很严重,这个c#居然能够修改掉内存,请问大家遇到这种情况没有
我毫无头绪,请大家帮忙分析一下。
还有,我们在应用程序中直接访问ARM硬件都是访问4字节对齐的地址的,
现在我的外部串口地址是一字节对齐的,那么我在应用程序中应该如何访问?
我使用sunrain_hjb的软件访问会说失败。

我想把寄存器dump出来,慢慢分析。
各位有何良策?

回复评论 (17)

你的C#程序有没去访问I/O空间或者内存空间什么的?
点赞  2009-7-22 11:06
引用: 引用 1 楼 xqhrs232 的回复:
你的C#程序有没去访问I/O空间或者内存空间什么的?


c#可以这样做吗?
点赞  2009-7-22 11:09
C#的内存管理,垃圾回收的时候该对象的内存地址会发生变化。
点赞  2009-7-22 12:09
跟内存没有关系吧,而且也跟C#的内存回收机制没关,他只不过帮你把一些资源释放而已,你也可以像C++一样自己释放。如果有C#代码是最好的了,跟踪一下,看看具体那段代码会影响波特率。代码你同事写的吧?
点赞  2009-7-22 12:16
引用: 引用 4 楼 constantine 的回复:
跟内存没有关系吧,而且也跟C#的内存回收机制没关,他只不过帮你把一些资源释放而已,你也可以像C++一样自己释放。如果有C#代码是最好的了,跟踪一下,看看具体那段代码会影响波特率。代码你同事写的吧?


是啊,我不懂c#,所以来问了。
嘿嘿,这个东西挺难搞的。
点赞  2009-7-22 12:42
引用: 引用 4 楼 constantine 的回复:
跟内存没有关系吧,而且也跟C#的内存回收机制没关,他只不过帮你把一些资源释放而已,你也可以像C++一样自己释放。如果有C#代码是最好的了,跟踪一下,看看具体那段代码会影响波特率。代码你同事写的吧?


那段代码根本没有涉及串口,也会,所以非常郁闷。
点赞  2009-7-22 12:43
如果是在C#中分配的内存,并且将指针传给native的程序来使用,那么切记在marshall之前将该块内存pin住,否则gc会回收。
点赞  2009-7-26 11:38
没搞过,不知道其优劣
点赞  2009-7-26 15:41
嘿嘿,现在那些干了几年c#的应用人员也找不到原因,看来我是无能为力了。结贴。
点赞  2009-7-31 10:49
说不定是.net cf的bug,自从给阿三拿去负责以后,代码质量就不行了……
点赞  2009-7-31 11:26
可以尝试:
用softice或其他工具在你要监视的串行口上设置断点,运行c#程序,看看是否
是它干的。
点赞  2009-7-31 11:58
引用: 引用 11 楼 mydo 的回复:
可以尝试:
用softice或其他工具在你要监视的串行口上设置断点,运行c#程序,看看是否
是它干的。


好,mydo 前辈,你的勋章也太多了吧?挂在身上不重吗,O(∩_∩)O哈哈~。
点赞  2009-7-31 12:46
引用: 引用 11 楼 mydo 的回复:
可以尝试:
用softice或其他工具在你要监视的串行口上设置断点,运行c#程序,看看是否
是它干的。

SOFTICE不能在CE上运行。CE上调试内核不像桌面那么麻烦。
点赞  2009-7-31 12:47
help me too,帮顶。哈哈
点赞  2009-7-31 14:12
帮顶了。
点赞  2009-7-31 14:15
是否有unsafe代码。
点赞  2009-8-1 09:52
C#的不了解 ! 此生不想扎到他
点赞  2009-8-1 16:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复