小编Sal*_*ore的帖子

通过/ dev/mem驱动Beaglebone GPIO

我正在尝试编写一个用于在Beaglebone上闪烁LED的C程序.我知道我可以使用sysfs方式......但是我想看看是否可以使用/ dev/mem获得与物理地址空间映射相同的结果.

我有一个头文件,beaglebone_gpio.h,内容如下:

#ifndef _BEAGLEBONE_GPIO_H_
#define _BEAGLEBONE_GPIO_H_

#define GPIO1_START_ADDR 0x4804C000
#define GPIO1_END_ADDR 0x4804DFFF
#define GPIO1_SIZE (GPIO1_END_ADDR - GPIO1_START_ADDR)
#define GPIO_OE 0x134
#define GPIO_SETDATAOUT 0x194
#define GPIO_CLEARDATAOUT 0x190

#define USR0_LED (1<<21)
#define USR1_LED (1<<22)
#define USR2_LED (1<<23)
#define USR3_LED (1<<24)

#endif
Run Code Online (Sandbox Code Playgroud)

然后我有我的C程序,gpiotest.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h> 
#include "beaglebone_gpio.h"

int main(int argc, char *argv[]) {
    volatile void *gpio_addr = NULL;
    volatile unsigned int *gpio_oe_addr = NULL;
    volatile unsigned int *gpio_setdataout_addr = NULL;
    volatile unsigned int *gpio_cleardataout_addr …
Run Code Online (Sandbox Code Playgroud)

embedded mmap embedded-linux gpio

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

Jazelle对Beaglebone

我需要在Beaglebone上运行Linux上的Java应用程序.我知道ARM内核确实支持Jazelle技术在硬件中执行Java字节码.无论如何,我不清楚我需要利用这项技术.我需要以某种方式"激活"Jazelle吗?我需要一个Jazelle知道的Java虚拟机吗?部署和运行利用Jazelle技术的Java软件的流程是什么?使用Jazelle需要许可证吗?

谢谢.

arm jazelle cortex-a8

10
推荐指数
2
解决办法
4068
查看次数

DLL和LIB文件

DLL和LIB文件有什么区别?什么是DLL文件内部以及LIB文件中的内容?是否需要DLL和LIB文件来创建可执行文件?

compiler-construction dll linker static dynamic

6
推荐指数
1
解决办法
668
查看次数

使用 Bison 解析错误

我正在使用 flex 和 bison 编写自己的脚本语言。我有一个语法,我能够生成一个解析器,它可以与正确的脚本一起正常工作。我希望能够为特殊错误情况添加一些有意义的错误消息。例如,我希望能够识别语句块中不匹配的括号或缺少的分号等。假设我有这些语句(这里语法不完整):

...
statements: statement SEMICOLON statements
    | statement SEMICOLON;

statement: ifStatement
    | whileStatement
    ;

ifStatement: IF expression THEN statements END
    | IF expression THEN statements ELSE statements END
    ;

whileStatement:  DO statements WHILE expression END
    ;
...
Run Code Online (Sandbox Code Playgroud)

我希望能够打印诸如“缺少分号”或“缺少 then 关键字”等消息。我应该修改语法以启用错误处理吗?或者有一些 Bison 功能可以做到这一点吗?

c grammar parsing bison

5
推荐指数
1
解决办法
2316
查看次数

JNI字符串返回值

我有一个Java实例方法,它返回一个String,我在C++中通过JNI调用此方法.我写了以下代码:

const char *DiagLayerContainer_getDESC(JNIEnv *env, jobject diagLayer) {
    jclass diagLayerClass = env->FindClass(PARSER_CLASS);
    jmethodID getDESCDiagLayerMethodID = env->GetMethodID(diagLayerClass, "getDESCDiagLayer", "(Ljava/lang/Object;)Ljava/lang/String;");
    jstring returnString = (jstring) env->CallObjectMethod(diagLayer, getDESCDiagLayerMethodID);
    return env->GetStringUTFChars(returnString, JNI_FALSE);
}
Run Code Online (Sandbox Code Playgroud)

如何获取字符串并将其转换为const char*?

我的程序在最后一行崩溃,访问冲突为0x00000000.returnString不是NULL.

c++ java string java-native-interface

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

C++解析器生成器

我正在编写自己的脚本语言,我需要一个软件工具来生成用于解析我的语言的C++代码.我需要一个词法分析器和一个生成C++代码的解析器生成器.能够生成Visual C++ 2010项目对我来说会很好.建议?

c++ parsing lexer lexical

2
推荐指数
1
解决办法
8218
查看次数

C持续集成

我有一个用一组makefile编译的C项目.我想继续整合这个项目.你知道我可以用于我的C项目的Jenkins这样的工具吗?

c continuous-integration makefile

2
推荐指数
1
解决办法
1198
查看次数

要在C程序中使用的C++ DLL

我有一个dll,其源代码是用C++编写的.我想创建该库的静态版本,我希望能够在另一个用纯C编写的库中链接这个静态库.编译器是Windows上的MinGW.我应该如何编译第一个C++静态库,以使它可以被C库使用?

c c++ dll mingw

2
推荐指数
1
解决办法
4350
查看次数

ARM体系结构和家族

我已经开始研究不同的基于ARM的目标,但我仍然缺少关于ARM内核,架构,指令集和核心系列的东西.在这里查看维基百科页面:http://en.wikipedia.org/wiki/ARM_architecture#ARM_cores 我看到每个架构都有多个ARM架构和多个系列.例如,对于ARMv6架构,有ARM11和ARM-Cortex-M系列.对于ARMv7和其他人来说也是如此.ARM11和ARM Cortex-M有什么区别,因为架构是相同的?ARM11和ARM Cortex-M是否支持相同的指令集,因为它们实现了相同的架构?

arm armv6

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

无法修复Bison语法中的转换/减少冲突

我有以下Bison语法:

%error-verbose
%{
#include "node.h"
NBlock *programBlock;

#define YYDEBUG 1

extern int yylex();
void yyerror(const char *s) { printf("Error: %s\n", s); }
%}

%union {
    Node *node;
    NBlock *block;
    NBody *body;
    NHeader *header;
    NExpression *expression;
    NStatement *statement;
    NIdentifier *identifier;
    NVariableDeclaration *variableDeclaration;
    NDoWhileStatement *doWhileStatement;
    NWhileStatement *whileStatement;
    NIfStatement *ifStatement;
    NForStatement *forStatement;
    std::vector<NVariableDeclaration*> *variableDeclarations;
    std::vector<NExpression*> *expressions;
    std::vector<NStatement*> *statements;
    std:string *string;
    int token;
}

/*
The %token directive is used to associate a type to a terminal symbol.
%token <type> 'terminal_list'
associates the specific …
Run Code Online (Sandbox Code Playgroud)

c reduce grammar bison shift

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

iperf UDP over IPv6

我正在使用iperf(https://iperf.fr/)通过IPv6 进行一些UDP带宽测试.使用具有以下命令行的Linux UDP客户端时,我的结果非常糟糕:

iperf -u -V -c fe80::5910:d4ff:fe31:5b10%usb0 -b 100m
Run Code Online (Sandbox Code Playgroud)

调查Wireshark的问题我发现在客户端发送数据时存在一些碎片.更准确地说,我看到UDP客户端传出的数据包大小为1510字节和92字节,交替.例如,我看到的UDP数据包具有以下模式(大小):1510,92,1510,92,1510,92,...,1510,92,...

阅读iperf2文档我读了以下选项(-l):

要读取或写入的缓冲区的长度.iPerf通过多次写入len个字节数组来工作.TCP的默认值为8 KB,UDP的默认值为1470字节.注意UDP,这是数据报大小,当使用IPv6寻址到1450或更低时需要降低以避免碎片.另请参见-n和-t选项.

我尝试通过使用以下内容替换Linux iperf UDP客户端命令行来执行相同的带宽测试:

iperf -u -V -c fe80::5910:d4ff:fe31:5b10%usb0 -b 100m -l1450
Run Code Online (Sandbox Code Playgroud)

我看到了很好的结果.看看Wireshark捕获,我看不到任何碎片了.

在IPv4上进行相同的测试我不需要更改默认的UDP数据报大小(我不需要使用'-l'选项)来获得良好的结果.

所以我的结论是碎片(通过IPv6)导致带宽性能不佳.

无论如何,我想知道在IPv6上将UDP数据报大小设置为1450时会发生什么.为什么我在IPv6上存在碎片,而不是在UDP上使用UDP数据报大小的默认值?此外,为什么在将UDP数据报大小减小到1450时没有碎片?

谢谢.

linux udp bandwidth ipv6 iperf

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

一次清除所有 Cmake 变量

是否有任何命令可以放在 CMakeLists.txt 文件中以清除所有已定义的变量?如果我理解得很好,我可以有选择地清除它们对每个变量有选择地“取消设置”,但我需要做一些更像“取消设置(*)”的事情。

c++ cmake

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