对齐和未对齐的内存访问有什么区别?
我在TMS320C64x DSP上工作,我想使用内部函数(汇编指令的C函数),它有
ushort & _amem2(void *ptr);
ushort & _mem2(void *ptr);
Run Code Online (Sandbox Code Playgroud)
_amem22字节的对齐访问在哪里进行_mem2未对齐访问.
我什么时候应该使用哪个?
我正试图在我的Beagleboard-xm rev上运行一个'hello world'类型的程序.C,通过puts从程序集中调用C 函数.
到目前为止,我一直在使用它作为参考:http://wiki.osdev.org/ARM_Beagleboard
这是我到目前为止所拥有的,但没有输出.
你好ç
volatile unsigned int * const UART3DR = (unsigned int *)0x49020000;
void puts(const char *s) {
while(*s != '\0') {
*UART3DR = (unsigned int)(*s);
s++;
}
}
void hello() {
puts("Hello, Beagleboard!\n");
}
Run Code Online (Sandbox Code Playgroud)
boot.asm
.global start
start:
ldr sp, =stack_bottom
bl hello
b .
Run Code Online (Sandbox Code Playgroud)
linker.ld
ENTRY(start)
MEMORY
{
ram : ORIGIN = 0x80200000, LENGTH = 0x10000
}
SECTIONS
{
.hello : { hello.o(.text) } > ram
.text : { …Run Code Online (Sandbox Code Playgroud) 我尝试测量在OMAP ZOOM 3430 MDK附带的TMS32064x + DSP上执行一段代码所需的时钟周期.我看一下DSP芯片的"程序员指南",它说DSP支持clock()功能.
我做的很简单,我就是这么做的
start = clock();
for (i=0;i<100;i++){
/* do something here */
}
stop = clock();
total = stop - start;
Run Code Online (Sandbox Code Playgroud)
然后将"start","stop"和"total"的值放入以前使用ARM处理器分配的共享内存中.然后我只是将它打印到ARM端的屏幕上.
问题是,在我第一次执行时,我总是得到相同的"总"值,然后在我的下一次运行中我总是得到0!"开始"和"停止"值与"总"值一起出现.
最奇怪的是他们似乎遵循了一点点模式!我把输出结果如下:
# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop clock() value = 0x0000f9f9
# ./sampleapp
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop clock() value = 0xf9f9f9f9
Run Code Online (Sandbox Code Playgroud)
显然,clock()运行不正常,但我不确定这是因为我做错了什么,还是因为我的硬件不支持这种类型的东西.任何想法为什么会这样?
我目前正在研发TI AM335x主板(入门套件),我想让OMAP看门狗工作......
据我所知,平台在启动时会自动启用看门狗,我认为在启动时打印出的以下消息可以确认:
[ 1.510192] OMAP Watchdog Timer Rev 0x01: initial timeout 60 sec
Run Code Online (Sandbox Code Playgroud)
如果我在这一点上没有错,如果我发出以下命令:
echo 0 > /dev/watchdog
Run Code Online (Sandbox Code Playgroud)
董事会应该在60秒内重启,不是吗?相反,60秒后没有任何反应......为什么?我错过了与此相关的内容吗?有谁能够帮我?
我正在为OMAP3430开发视频编解码器.我已经有用C++编写的代码,我尝试修改/移植它的某些部分以利用DSP(SDK(OMAP ZOOM3430 SDK)我有一个额外的DSP).
我尝试移植一个小的for循环,它运行的是非常少量的数据(~250字节),但是在不同的数据上大约需要2M次.但CPU和DSP之间通信的过载远远超过增益(如果我有的话).
我认为这个任务就像在普通计算机中优化GPU的代码一样.我的问题是移植什么样的部件会有益?GPU程序员如何处理这些任务?
在这些之后,DSP程序的执行开始,并且DSP在完成处理时通过消息通知GPP.只是为了尝试我不在DSP程序中进行任何处理.我只是将"处理完成"消息发送回GPP.这仍然需要耗费大量时间.可能是因为内部/外部内存使用,还是因为通信过载?
我正在为微型oled编写显示驱动程序.board是dart4460(omap4460),提供dss(显示子系统).所以我正在使用dss编写驱动程序.
但我不知道我写的是对还是不对
oled display使用dpi接口和i2c命令
我提到了使用dpi和i2c的pico dlp投影机驱动源.
这是数据表
dart4460:http://www.variscite.com/images/DART-4460-DS_107.pdf
微显示器:https://www.dropbox.com/s/ixpws4qzo3ttj6e/SVGA050.pdf ? dl = 0
码:
面板svga.c
#define SLAVE_ADDR_READ 0x1F
#define SLAVW_ADDR_WRITE 0x1E
struct svga050_i2c_data {
struct mutex xfer_lock;
};
struct svga050_data {
struct i2c_client *client;
struct mutex lock;
};
static struct i2c_board_info svga050_i2c_board_info = {
I2C_BOARD_INFO("svga050_i2c_drive",SLAVE_ADDR_WRITE);
}
static struct omap_video_timings svga050_timings = {
.x_res = 800,
.y_res = 600,
.pixel_clock = 40000,
.hsw = 128,
.hfp = 40,
.hbp = 88,
.vsw = 4,
.vfp = 1, …Run Code Online (Sandbox Code Playgroud) 我正在寻找由ARM Cortex-A9处理器(如具有多个ARM A9处理器的Nvidia Tegra 2和Tegra 3)制造的SoC的L1访问延迟和L2访问延迟.
我可以找到一些关于这些架构的L1和L2大小的信息,但我对L1和L2访问延迟的信息不多.我发现的唯一可靠信息是"在Tegra 3上L2缓存延迟比2缓存2个周期快,而L1缓存延迟没有改变."
这里提到Tegra 2上的L2具有25个周期的延迟,并且这里提到L1具有4个周期的延迟并且L2具有31到55个周期的延迟.这些参考文献都不是完全可靠的.我希望能找到有关Nvidia,TI和Qualcomm网站和技术文档的更多信息,但没有成功.
编辑:OMAP4460和OMAP4470等类似SoC的信息也很棒.
寻找一些帮助来测试具有OMAP L138的硬件流控制的UART实现。为了测试实现,我使用minicom了模拟串行链接的另一端的方法,并且正在寻找一些有关如何配置它的见解。
我有一个简单的应用程序,它通过UART将消息从OMAP发送到minicom。如果OMAP和minicom均配置为不使用硬件流控制,则此操作将按预期进行。当我打开硬件流控制时,在minicom上看不到任何输出。
这是我遵循的步骤列表:
stty我启用rts / cts握手stty -F /dev/ttyS1 crtscts。使用命令,stty -F /dev/ttyS1 -a我可以确认已启用crtscts。上面的两个更改确保在终端程序和UART驱动程序中启用了硬件流控制。OMAP上的UART也已配置为使用硬件流控制。
但是,上面列出的对minicom的更改似乎不足以使流量控制正常工作。启动应用程序后,来自OMAP的RTS(发送请求)信号变低,从而向minicom指示它要发送数据。如果配置正确,minicom应将OMAP的CTS(清除发送)信号拉低,并开始接受数据,直到达到指定的接收缓冲区阈值为止。这不会发生。OMAP的CTS输入始终为高。只是为了踢一下,我尝试在OMAP和voila上将RTS与CTS短路,期望的消息确实会在minicom上显示!这是一张图像,显示了两者如何连接。

从我的尝试来看,好像我在配置minicom的方式中缺少了一些东西。任何建议表示赞赏。
我尝试为基于 TI am335x SoC 的电路板创建裸机应用程序。我需要做的一件事是callback1在上升沿和callback2下降沿调用。从我发现的数据表中,可以通过写入1 << pinRISINGDETECT 和 FALLINGDETECT GPIO 寄存器来启用对上升沿和下降沿的同时检测。但是,我不明白(在数据表中没有看到它的迹象),我如何确定当前出现的中断是由 GPIO 的上升沿还是下降沿引起的?
我想知道哪个更好(性能)选项:
我想运行一些轻量级的linux并进行一些非常密集的计算,如图像/视频处理(可能是以后的3D),也可以处理它们上的音频.当然所有的浮点数学.