小编sam*_*moz的帖子

使用yyparse()创建一个两遍汇编程序?

我正在为我正在研发的自定义微控制器编写汇编程序.我已经将汇编程序设置为将指令汇编为二进制的程度.

但是,我现在遇到了使标签生效的问题.目前,当我的汇编程序遇到新标签时,它会存储标签的名称及其引用的内存位置.当指令引用标签时,汇编器会查找标签并用适当的值替换标签.

这很好,花花公子,但如果标签是在引用它的指令后定义的呢?因此,我需要让我的解析器在代码上运行两次.

这是我目前的主要功能:

303 int main(int argc, char* argv[])
304 {
305 
306     if(argc < 1 || strcmp(argv[1],"-h")==0 || 0==strcmp(argv[1],"--help"))
307     {
308         //printf("%s\n", usage);
309         return 1;
310     }
311     // redirect stdin to the file pointer
312     int stdin = dup(0);
313     close(0);
314 
315     // pass 1 on the file
316     int fp = open(argv[1], O_RDONLY, "r");
317     dup2(fp, 0);
318 
319     yyparse();
320 
321     lseek(fp, SEEK_SET, 0);
322 
323     // pass 2 on the file …
Run Code Online (Sandbox Code Playgroud)

assembly parsing bison flex-lexer

4
推荐指数
1
解决办法
1452
查看次数

在文件上使用mmap

我试图允许两个不同的进程通过使用内存映射相同的文件进行通信.但是,我遇到了一些问题.我有一种感觉,这与我使用open()调用并将我的文件描述符传递给mmap的方式有关.

这是我的代码,你能看到它有什么问题吗?

对象1的代码:

 16     FILE* temp = fopen(theSharedFileName, "w");
 17     fseek(temp, fileSize-1, SEEK_SET);
 18     fprintf(temp, "0"); // make the file a certain size
 19     fseek(temp, 0, SEEK_CUR);
 20 
 21     int sharedFileName = fileno(temp);
 ...
 31     sharedArea = (MyStruct*)mmap(0, fileSize,
 32         PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED, sharedFileName, 0);
Run Code Online (Sandbox Code Playgroud)

我使用"w"文件模式,因为对象1只会被制作一次,我希望它重置以前存在的任何数据.

对象2的代码:

 130     FILE* tempFile = fopen(sharedFileName, "a");
 131     int theFile = fileno(tempFile);
 ...
 135     sharedArea = (MyStruct*)mmap(NULL, fileSize,
 136         PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED, theFile, 0);
Run Code Online (Sandbox Code Playgroud)

c mmap file

4
推荐指数
1
解决办法
7151
查看次数

构建集群所需的软件

我一直在考虑让我的计算机更加环保,并在我的下一台计算机上使用一些低功耗的迷你itx主板.有些可以产生10瓦以下且非常便宜.

所以我想,如果一个是如此低成本和低功耗,为什么不尝试从他们中创建一个集群?但是,我不确定在操作系统或管理软件方面需要做些什么来实现这一目标?

任何人都可以提供有关现有软件的建议,或者有关如何设计我自己的想法吗?

cluster-computing

4
推荐指数
1
解决办法
703
查看次数

我如何修复此代码以允许我的AVR通过串口通话?

我最近一直在拉我的头发试图让我的STK200上的ATmega162通过RS232与我的电脑通话.我检查并确保STK200包含MAX202CPE芯片.

我已经将芯片配置为使用其内部8MHz时钟并将其除以8.

我试图从数据表中复制代码(并在编译器抱怨的地方进行了更改),但无济于事.

我的代码如下,有人可以帮我解决我遇到的问题吗?

我已经确认我的串口可以在其他设备上运行并且没有故障.

谢谢!

#include <avr/io.h>
#include <avr/iom162.h>

#define BAUDRATE 4800

void USART_Init(unsigned int baud)
{
    UBRR0H = (unsigned char)(baud >> 8);
    UBRR0L = (unsigned char)baud;

    UCSR0B = (1 << RXEN0) | (1 << TXEN0);

    UCSR0C = (1 << URSEL0) | (1 << USBS0) | (3 << UCSZ00);
}

void USART_Transmit(unsigned char data)
{
    while(!(UCSR0A & (1 << UDRE0)));

    UDR0 = data;
}

unsigned char USART_Receive()
{
    while(!(UCSR0A & (1 << RXC0)));

    return UDR0;
}

int main()
{ …
Run Code Online (Sandbox Code Playgroud)

embedded avr serial-port

4
推荐指数
3
解决办法
1055
查看次数

我可以对此DAG应用什么算法?

我有一个表示属性列表的DAG.这些属性是这样的,如果a> b,则a具有b的有向边.它也是传递性的,因此如果a> b和b> c,则a具有c的有向边.

然而,从a到c的有向边缘是多余的,因为a具有到b的有向边缘并且b具有到c的有向边缘.我怎样才能修剪所有这些多余的边缘?我在考虑使用最小生成树算法,但我不确定在这种情况下适用的算法是什么

我想我可以从每个节点及其所有传出边缘进行深度优先搜索,并比较它是否可以在不使用某些边缘的情况下到达某些节点,但这看起来非常低效且缓慢.

算法完成后,输出将是与图形一致的所有节点的线性列表.因此,如果a有b,c和d三个有向边.b和c也各自具有d的有向边,输出可以是abcd或acbd.

algorithm tree directed-acyclic-graphs

4
推荐指数
1
解决办法
1759
查看次数

如何将WordPress博客嵌入其他网站?

我目前使用iWeb制作我的网站.有没有办法可以将WordPress博客嵌入网站?通过简单的选项或通过编码?

wordpress iweb

4
推荐指数
1
解决办法
3万
查看次数

如何检测是否安装了Windows Installer?

我已经找到了一种方法,通过阅读以前的SO帖子来判断安装了哪个版本的.NET框架,但我没有找到任何关于Windows Installer的信息.

是否有可以验证Windows Installer 3.01+已安装的注册表项或类似内容?

windows windows-installer version

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

什么是用于用户登录的成熟PHP解决方案?

除了博客或静态网页之外,我从未真正做过任何严肃的网页编程.对于我正在开发的Web应用程序,我需要进行网站登录.

为了不重新发明轮子,我该如何实现登录?某个地方是否有"插入式"组件?我并不反对使用加密技术,但我并没有太多使用PHP或Web协议的经验.

我正在使用CodeIgniter框架,所以如果有人在这种情况下有任何答案,我会感兴趣.

html php login codeigniter

4
推荐指数
1
解决办法
211
查看次数

如何获得写入注册表项的权限?

我试图在注册表的HKLM部分下编写一些注册表项.我使用RegCreateKeyEx()和RegSetValueEx()的方式类似于我见过的一些MSDN示例.

但是,RegSetValueEx()调用失败,错误5,FormatMessage()表示"访问被拒绝"

我想我需要提升权限,但我不知道执行此操作所需的API调用?

这是我的代码:

HKEY hk;
DWORD dwDisp;
LONG result = RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\MyApp"), 0, NULL,
    REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hk, &dwDisp);
if(result == ERROR_SUCCESS)
{       
    BYTE value[] = "Hello world!";

    result = RegSetValueEx(hk, _T("MyValue"), 0, REG_EXPAND_SZ, value, strlen((char*)value)+1);
    if(result != ERROR_SUCCESS)
    {
        DBG_PRINT2("RegSetValueEx failed with code: %d\n", result);
    }

    RegCloseKey(hk);
}
Run Code Online (Sandbox Code Playgroud)

windows winapi

4
推荐指数
1
解决办法
5951
查看次数

使用#defines自动替换变量

我有一个大约100个#defines的文件,从1-100开始,每个文件都有一个唯一的字符串值.

现在我正在尝试打印这个值,但是我想要打印#define是什么,而不是值.例如:

#define FIRST_VALUE 1
var = FIRST_VALUE;
printf("%s", var);
Run Code Online (Sandbox Code Playgroud)

我希望printf打印FIRST_VALUE,而不是1.

有没有办法在C中这样做?或者我必须在switch语句中写出100多个case块?

c string replace c-preprocessor

3
推荐指数
1
解决办法
388
查看次数