我有一个使用STM32F103(ARM Cortex M3)的嵌入式项目,它在发布模式下偶尔会遇到硬故障.作为恢复的一部分,我想从硬故障之前检索PC值并将其存储起来以便稍后在电池备份区域中进行调试.
如何在硬故障点确定程序计数器的值?显然,PC现在设置在硬故障中断的位置.
我应该在哪里看?它有一个普通模式寄存器组的地址吗?
谢谢!
我有一个用于汇编的裸机ARM的启动代码,我试图了解它是如何工作的.二进制文件写在一些外部Flash中,并在启动时将其自身的一部分复制到RAM中.即使我读过这个维基百科条目,我仍然没有在这种情况下完全获得重定位的概念.RAM映射到低地址窗口,闪存在高地址窗口中.有人可以向我解释为什么我们在这里测试链接寄存器的值吗?
/* Test if we are running from an address, we are not linked at */
bl check_position
check_position:
mov r0, lr
ldr r1, =check_position
cmp r0, r1 /* ; don't relocate during debug */
beq relocated_entry
Run Code Online (Sandbox Code Playgroud) 我正在尝试理解C函数的汇编代码.我无法理解为什么andl -16要在主要方面完成.是为局部变量分配空间.如果subl 32是这样,为什么要为主要做.
我无法理解拆卸的func1.随着读取,堆栈从高阶地址增长到8086处理器的低阶地址.那么为什么在ebp的正侧(对于参数偏移)进行访问以及为什么不在ebp的负侧进行访问.func1中的局部变量是3 +返回地址+保存的寄存器 - 所以它必须是20,但为什么它是24?(subl $24,esp)
#include<stdio.h>
int add(int a, int b){
int res = 0;
res = a + b;
return res;
}
int func1(int a){
int s1,s2,s3;
s1 = add(a,a);
s2 = add(s1,a);
s3 = add(s1,s2);
return s3;
}
int main(){
int a,b;
a = 1;b = 2;
b = func1(a);
printf("\n a : %d b : %d \n",a,b);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
汇编代码:
.file "sample.c"
.text
.globl add …Run Code Online (Sandbox Code Playgroud) 运行Jocl(opencl包装器)内核会禁用java3d输出.当opencl完成时,java3d继续工作.
我怎样才能让Opencl(jocl)和opengl(java3d)一起工作?我需要一些告诉"它的opencl时间"的命令,当它完成时它告诉"它现在的opengl时间".
不知何故,当opencl工作时,java3D Jpanel会冻结并变灰.
我做了一些跟踪,发现java3D正在骚扰opencl(jocl),jmonkey引擎3.0并没有这样做.另一个尝试显示jmonkey做同样的事情.突然所有粒子位置都停止通过opencl更新,然后所有位置都变为0,0,0.
为每个设备使用唯一的上下文,程序,ID,....
误差如何:当星系渲染得很平滑时,突然所有粒子投射到我没有创建的平面上,然后在飞机投射到一条线上几秒后最终将该线投射到一个点上.所有这些必须是因为缓冲区x [] y [] z []开始为所有元素变为零.
编辑:较低的gpu工作频率使错误频率降低.这可能会比使用furmark更难推动GPU,因为在本地进行计算可以更快地工作吗?或者这是jocl/jmonkey/java3d之间的时间/访问优先级问题?所有其他程序,包括furmark,稳定在1225MHz(hd7870鹰)但这可能在1000MHz(AMD默认的hd7870)更稳定或看起来不稳定,因为缓冲区被垃圾收集故障破坏?
Aparapi(java的opencl包装器)从来都不是问题,在1200MHz下工作正常甚至还有"驱动程序停止运行并恢复"错误.催化剂13.3 beta.Jocl 1.5.1和累1.5.2.Catalyst 13.4 whql也是如此.
放System.gc(); 就在内核重复循环立即出现错误之前,必须有一个我错过的垃圾收集
使用一些跟踪:clCreateBuffer方法存在垃圾回收问题
编辑:解决了问题.当使用CL.CL_MEM_USE_HOST_PTR属性时,主线程中clCreateBuffer创建的缓冲区似乎是子线程的垃圾(要收集).CL.CL_MEM_COPY_HOST_PTR解决了问题,以换取%1-%2的性能损失
谢谢.
我已经FreeRTOS在一些嵌入式项目中使用了一年时间,到目前为止它工作得非常完美。FreeRTOS目前我面临着一个与使用高速中断移植到相关的难题PIC24H,希望大家能帮助我解决这个问题。提前致谢
我创建了一个小型演示项目以方便测试:
两个任务:
// Task 1
if (xTaskCreate(RTOSTask_1, (signed char) "[T1]", configMINIMAL_STACK_SIZE2, NULL, tskIDLE_PRIORITY + 1, &hTask1) == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY)
{
LREP("\r\nCannot create Task 1.");
Display_Error(1000);
}
// Task 2
if (xTaskCreate(RTOSTask_2, (signed char) "[T2]", configMINIMAL_STACK_SIZE2, NULL, tskIDLE_PRIORITY + 2, &hTask2) == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY)
{
LREP("\r\nCannot create Task 2.");
Display_Error(1000);
}
Run Code Online (Sandbox Code Playgroud)
任务落实:
void RTOSTask_1(void* pvParameter)
{
while(1)
{
if (xSemaphoreTake(hTask1Semaphore, portMAX_DELAY) == pdTRUE)
{
putchar1('1');
}
}
}
void RTOSTask_2(void* pvParameter)
{
while(1)
{
if (xSemaphoreTake(hTask2Semaphore, …Run Code Online (Sandbox Code Playgroud) 这通常不是一个问题,在哪里可以找到分步指南,而是指导本身.
我对这篇文章的意图是给别人一个提示,他在编译驱动程序插件方面遇到的问题和我最近的问题一样.
我正在尝试同时使用最新的 gstreamer 和 x265enc。我看到有人已经在http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/log/ext/x265/gstx265enc.c 中发布了一些提交, 任何人都可以给出一个已知可以工作的示例管道(gst-launch-1.0 管道示例将非常有帮助)
1) gstreamer 的 x265enc 插件的当前状态是什么?它真的有效吗?我需要使用 gstreamer 的哪个分支来构建 x265enc?我想构建与 x265enc 插件兼容的整个 gsteamer 源代码。x265enc 的系统要求是什么以及如何构建它?任何维基/基本说明都会非常有帮助。
我的目标是在 vaughnlive.tv 上将我的网络摄像机(h264 流)作为 h265 流进行广播
目前,我使用以下管道以 h264 格式广播:
GST_DEBUG=2 gst-launch-1.0 flvmux name=mux streamable=true !rtmpsink sync=true location="rtmp://xxxxxxxxxxxx" rtspsrc location="rtsp://xxxxxxx" caps="application/x-rtp, media=(string)audio, clock-rate=(int)90000, encoding-名称=(字符串)MPA,有效载荷=(整数)96”!rtpmpadepay !mpegaudioparse !队列 !疯狂的 !音频转换!队列 !voaacenc比特率=128000!分析!音频/mpeg,mpegversion=4,流格式=raw!多路复用器。rtspsrc location="rtsp://xxxxxxx" caps="application/x-rtp,media=(string)video,clock-rate=(int)90000, encoding-name=(string)H264"!rtph264depay !video/x-h264,stream-format=avc,alignment=au,byte-stream=false !队列 !解码器!队列 !视频率!“视频/x-raw,帧率=30/1”!队列 !x264enc 线程=4 速度预设=超快比特率=3072 !多路复用器。
2)任何人都可以建议我应该如何更改此管道以使用 x265enc 元素以 h265 格式广播?
运行以下makefile时遇到错误make -f makefile2 install(除了安装其余的工作):
all:myapp
#which compiler
CC = gcc
#Where to install
INSTDIR = /usr/local/bin
#where are include files kept
INCLUDE = .
#Options for development
CFLAGS = -g -Wall -ansi
#Options for release
# CFLAGS = -O -Wall -ansi
myapp: main.o 2.o 3.o
$(CC) -o myapp main.o 2.o 3.o
main.o: main.c a.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c main.c
2.o: 2.c a.h b.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
3.o: 3.c b.h c.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c
clean: …Run Code Online (Sandbox Code Playgroud) 我试着查看我想要做的事情,但我无法找到具体的我正在尝试做的事情.我有一个包含多行的文本文件,如下所示:
12345,12345,12.34,12345,12345
Run Code Online (Sandbox Code Playgroud)
它在每一行都是相同的格式,我想得到每一行并将数字插入某些变量.像这样的东西:
file >> int1 >> int2 >> double1 >> int3 >> int4;
Run Code Online (Sandbox Code Playgroud)
但是这对我来说很难做到,因为逗号分隔了每个数字.我曾经能够在有"空间"时这样做但是逗号真的让我失望了.有任何想法吗?
我正在尝试将我的软件添加到注册表中,我发现了一些我可以使用的代码,但是没有完整的代码C/C++对我来说是新的,不能自己创建.但这里有一个基本思路:检查是否设置了reg键,如果没有创建它.
我能够使用以下代码获取我的程序位置:
TCHAR szPath[MAX_PATH];
GetModuleFileName(NULL,szPath,MAX_PATH);
Run Code Online (Sandbox Code Playgroud)
并且能够创建密钥:(不确定它是否正确)
HKEY newValue;
RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&newValue);
RegSetValueEx(newValue,"myprogram",0,REG_SZ,(LPBYTE)szPath,sizeof(szPath));
RegCloseKey(newValue);
return 0;
Run Code Online (Sandbox Code Playgroud)
遗漏了什么,小小的检查钥匙是否已经存在......
谢谢!
c ×3
arm ×2
assembly ×2
c++ ×2
applet ×1
bare-metal ×1
comma ×1
cortex-m3 ×1
embedded ×1
encryption ×1
freertos ×1
getline ×1
gstreamer ×1
h.265 ×1
ifstream ×1
interrupt ×1
java ×1
java-3d ×1
jocl ×1
linux ×1
makefile ×1
mingw ×1
mplab ×1
opencl ×1
qt ×1
registry ×1
rtsp ×1
sqlcipher ×1
sqlite ×1
stm32 ×1
windows ×1
x86 ×1