我正在为我正在研发的自定义微控制器编写汇编程序.我已经将汇编程序设置为将指令汇编为二进制的程度.
但是,我现在遇到了使标签生效的问题.目前,当我的汇编程序遇到新标签时,它会存储标签的名称及其引用的内存位置.当指令引用标签时,汇编器会查找标签并用适当的值替换标签.
这很好,花花公子,但如果标签是在引用它的指令后定义的呢?因此,我需要让我的解析器在代码上运行两次.
这是我目前的主要功能:
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) 我试图允许两个不同的进程通过使用内存映射相同的文件进行通信.但是,我遇到了一些问题.我有一种感觉,这与我使用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) 我一直在考虑让我的计算机更加环保,并在我的下一台计算机上使用一些低功耗的迷你itx主板.有些可以产生10瓦以下且非常便宜.
所以我想,如果一个是如此低成本和低功耗,为什么不尝试从他们中创建一个集群?但是,我不确定在操作系统或管理软件方面需要做些什么来实现这一目标?
任何人都可以提供有关现有软件的建议,或者有关如何设计我自己的想法吗?
我最近一直在拉我的头发试图让我的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) 我有一个表示属性列表的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.
我目前使用iWeb制作我的网站.有没有办法可以将WordPress博客嵌入网站?通过简单的选项或通过编码?
我已经找到了一种方法,通过阅读以前的SO帖子来判断安装了哪个版本的.NET框架,但我没有找到任何关于Windows Installer的信息.
是否有可以验证Windows Installer 3.01+已安装的注册表项或类似内容?
除了博客或静态网页之外,我从未真正做过任何严肃的网页编程.对于我正在开发的Web应用程序,我需要进行网站登录.
为了不重新发明轮子,我该如何实现登录?某个地方是否有"插入式"组件?我并不反对使用加密技术,但我并没有太多使用PHP或Web协议的经验.
我正在使用CodeIgniter框架,所以如果有人在这种情况下有任何答案,我会感兴趣.
我试图在注册表的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) 我有一个大约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块?