我有一个C函数,它试图将帧缓冲区复制到FSMC RAM.
这些函数将游戏循环的帧速率降低到10FPS.我想知道如何分析反汇编函数,我应该计算每个指令周期吗?我想知道CPU在哪里花费时间,在哪一部分.我确定算法也是一个问题,因为它的O(N ^ 2)
C函数是:
void LCD_Flip()
{
u8 i,j;
LCD_SetCursor(0x00, 0x0000);
LCD_WriteRegister(0x0050,0x00);//GRAM horizontal start position
LCD_WriteRegister(0x0051,239);//GRAM horizontal end position
LCD_WriteRegister(0x0052,0);//Vertical GRAM Start position
LCD_WriteRegister(0x0053,319);//Vertical GRAM end position
LCD_WriteIndex(0x0022);
for(j=0;j<fbHeight;j++)
{
for(i=0;i<240;i++)
{
u16 color = frameBuffer[i+j*fbWidth];
LCD_WriteData(color);
}
}
}
Run Code Online (Sandbox Code Playgroud)
拆卸功能:
08000fd0 <LCD_Flip>:
8000fd0: b580 push {r7, lr}
8000fd2: b082 sub sp, #8
8000fd4: af00 add r7, sp, #0
8000fd6: 2000 movs r0, #0
8000fd8: 2100 movs r1, #0
8000fda: f7ff fde9 bl 8000bb0 <LCD_SetCursor>
8000fde: 2050 movs …Run Code Online (Sandbox Code Playgroud) 我有一套点云,我想测试3D房间是否有角落.所以我想讨论我的方法,如果在速度方面有更好的方法,因为我想在手机上测试它.
我将尝试使用hough tranform来检测线条,然后我将尝试查看是否有三条相交的线条,它们也构成了一条相交的两个平面.
我正在尝试编写一个更好的版本的OpenCV的cv :: resize(),我来了一个代码在这里:https://github.com/rmaz/NEON-Image-Downscaling/blob/master /ImageResize/BDPViewController.m 该代码用于将图像下采样2但我无法获得算法.我想首先将该算法转换为C然后尝试修改它以用于学习目的.是否也可以将其转换为任何尺寸的缩减示例?
功能是:
static void inline resizeRow(uint32_t *dst, uint32_t *src, uint32_t pixelsPerRow)
{
const uint32_t * rowB = src + pixelsPerRow;
// force the number of pixels per row to a multiple of 8
pixelsPerRow = 8 * (pixelsPerRow / 8);
__asm__ volatile("Lresizeloop: \n" // start loop
"vld1.32 {d0-d3}, [%1]! \n" // load 8 pixels from the top row
"vld1.32 {d4-d7}, [%2]! \n" // load 8 pixels from the bottom row
"vhadd.u8 q0, q0, …Run Code Online (Sandbox Code Playgroud) 我遇到了这个问题:
给定一个单链表,将所有奇数节点组合在一起,然后是偶数节点。请注意,这里我们谈论的是节点号,而不是节点中的值。
您应该尝试就地进行。该程序应在O(1)空间复杂度和O(节点)时间复杂度下运行。
例:
Run Code Online (Sandbox Code Playgroud)Given 1->2->3->4->5->NULL, return 1->3->5->2->4->NULL.
我已经看到了解决方案,但是我不明白,我需要有人直观地解释问题的解决方案。
这是一个解决方案,但使用Java。我无法想象指针操作,有人可以为我画些什么吗?
public ListNode oddEvenList(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode odd = head;
ListNode even = head.next;
ListNode evenHead = even;
while(odd.next != null && even.next != null){
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}
Run Code Online (Sandbox Code Playgroud) c++ ×3
arm ×2
algorithm ×1
assembly ×1
disassembly ×1
java ×1
linked-list ×1
neon ×1
opencv ×1
optimization ×1
point-clouds ×1
stm32 ×1