小编Cod*_*oet的帖子

如何使自定义USB设备在Windows中显示为COM端口?

我开发了一个USB设备,通过简单但专有的界面和一些自定义Linux驱动程序与linux通信.我的目标是在没有编写Windows驱动程序的情况下将其移植到Windows.我想要做的是找到一个开源或内置类驱动程序的Windows,看起来像Windows中的COM端口.然后我将定制嵌入式软件以匹配虚拟COM端口期望看到的协议和描述符.

我的想法是,我可以将我的设备插入Windows机器,并且会出现相对高速的COM端口,而我不得不为它开发Windows驱动程序.

我一直在看USB CDC(通信设备类)文档,它看起来很有希望,但我不知道哪个子接口最好用,以便它显示为COM端口.

这里有没有人做过这样的工作或者可以提供一些见解?特别:

  1. 是否有"内置"到Windows的虚拟COM驱动程序,或者我需要第三方驱动程序.
  2. 我应该使用哪个CDC子类进行简单的RS232仿真(不需要调制解调器AT命令等)
  3. 有没有更好的选择来做我想做的事情.

谢谢

windows embedded usb serial-port driver

10
推荐指数
1
解决办法
5417
查看次数

如何防止优化编译器中断无中断的关键部分?

我有一些C宏来禁用和启用中断,以便我可以定义代码的关键部分.我想确保优化器符合操作,不移动它们或删除它们.

#define ARM_INT_KEY_TYPE         unsigned int
#define ARM_INT_LOCK(key_)   ({ \
    asm("MRS %0,cpsr" : "=r" (key_)); \
    asm("MSR cpsr_c,#(0x1F | 0x80 | 0x40)"); \
})
#define ARM_INT_UNLOCK(key_) asm("MSR cpsr_c,%0" : : "r" (key_))
Run Code Online (Sandbox Code Playgroud)

用法如下:

int init_i2c(p_device_i2c dev){

// Interrupts are enabled
doSomething();

ARM_INT_KEY_TYPE key;
ARM_INT_LOCK(key);

// Interrupts are disabled
pMX27_GPIO i2c_clk = (pMX27_GPIO)(GPIO_BASE_ADDR | I2C_CLK_PORT);
pMX27_GPIO i2c_sda = (pMX27_GPIO)(GPIO_BASE_ADDR | I2C_DATA_PORT);

i2c_clk->GIUS   &= ~(1 << I2C_CLK_PIN);         // I2C Signals
i2c_sda->GIUS   &= ~(1 << I2C_DATA_PIN);        // I2C Signals

ARM_INT_UNLOCK(key);
// Interrupts ON again …
Run Code Online (Sandbox Code Playgroud)

c embedded optimization

9
推荐指数
1
解决办法
267
查看次数

约束优化编译器以保持重复分配的标准方法是什么?

我有一些嵌入式代码将命令写入内存地址以控制外围,如下所示:

void intelStartEraseBlock(uint16_t *wordAddress) {
  *wordAddress =  0x20;  //block erase
  *wordAddress =  0xD0;  //block erase confirm
}
Run Code Online (Sandbox Code Playgroud)

我怀疑优化器正在跳过第一个任务.这是不稳定的工作吗?还是有更好的解决方案......

注意:这是遗留的api代码,所以我不打算重构很多.我在这里寻找'本地'解决方案.

c embedded optimization

4
推荐指数
2
解决办法
107
查看次数

标签 统计

embedded ×3

c ×2

optimization ×2

driver ×1

serial-port ×1

usb ×1

windows ×1