使用 SIMD(ARM)的快速位矩阵(64x64)转置算法
我试图理解,如果有一种快速的方法可以使用ARM SIMD指令进行矩阵转置(64x64位). 我试图探索ARM SIMD的VTRN指令,但不确定其在这种情况下的有效应用. 输入矩阵表示为UINT64 MAT [64],并且输出应该是位转置. 例如,如果输入为: 0000.... 1111.... 0000.... 1111.... 预期输出: 0101.... 0101.... 0101.... 0101.... 解决方案 矩阵换位的基本递归方案是表示矩阵为块矩阵 AB CD 您首先要转置A,B,C和D的每个thement插,然后交换B和C.实际上,这意味着要应用一系列日益粗糙的Swizzle步骤,首先使用位于位操作,然后使用置换操作./p> 例如,可以实现 # transpose a 64x64 bit matrix held in x0 GLOBL(xpose_asm) FUNC(xpose_asm) # plan of attack
16 2024-04-22
编程技术问答社区
如何为Android构建普通的Mono?
我目前在Raspberry Pi上使用Mono.我知道Xamarin开发的Android有一个商业填充单声道,并且也有免费的有限试用版. 是否仍然有plain单声道的开源版本?我的意思是像Raspberry Pi这样的普通版本 - 没有Android SDK,仅用于控制台应用等. 我发现: https://github.com/koush/koush/androidmono . 但是看来它不再是开发的. 是否可以为Android构建普通的单声道? 解决方案 在此处介绍了为手臂建造单声道: http://www.mono-project.com/docs/about-mono/supported-platforms/arm/
12 2024-04-22
编程技术问答社区
在Mono for ARM上运行简单的winforms应用程序
我目前正在尝试建立一个环境,在这种环境中,我可以使用Visual Studio 2013创建Winform应用程序,然后我想将其放在ARM V7 Beaglebone Black上,并带有一个附带的触摸屏,它们应该在其中运行. 为了这样做,我采用了一个Ubuntu 14.10 AMD64系统,并使用Beaglebone Black的工具链和ScratchBox2创建了跨编译环境. 我通过使用它来编译一些本机测试程序来验证工具链正确工作,它们确实在Ubuntu Machine(带SB2)以及Beaglebone Black上完美运行. . 接下来,我是从源来的单声道,一次为Ubuntu机器,也为Beaglebone Black编译了一次.为此,我主要遵循这篇文章.最后,我有一个目录,其中有一棵完整的单一树,其本机组件已正确编译为手臂.我通过将单声道目录复制到它后,通过在Ubuntu系统上运行sb2 mono -V以及在Beaglebone Black上运行sb2 mono
16 2024-04-13
编程技术问答社区
Windows -1252是不支持的编码名称
我正在使用Windows 10 Universal App和ARM CPU,为Raspberry Pi创建应用程序.我在编码时会遇到以下错误: 附加信息:'Windows-1252'不是支持的编码名称.有关定义自定义编码的信息,请参见编码的文档.RegisterProvider方法. private async void Login(string passcode) { try { MySqlConnection conn = new MySqlConnection("Server=..."); MySqlCommand cmd; conn.Open(); cmd = new MySqlCommand("Select * from ..."); var dr = cmd.ExecuteReader();
22 2024-04-12
编程技术问答社区
将C语言源代码转换为ARM汇编
我正在尝试将.c文件转换为ARM(Raspberry PI2的ARMV7L),但是我找不到任何在线转换器或了解其工作原理.以前这些.c文件在Windows平台中可执行,因此无法在Pi的ARM架构上执行.有人可以为此提供帮助吗? 解决方案 任何C编译器都可以从C代码生成汇编代码,如果您的目标是专门为ARM生成汇编代码,那么您将需要一个交叉编译器,例如 gnu臂嵌入工具链. 对于GCC,特别是您在编译时只需要使用-S选项,因此该行看起来像: gcc -S -source.c -o output.s 当然,您需要包含任何标题,并包括该目录以进行编译. 如果您只想交叉编译,则只需进行完整的编译组合和链接过程即可.取决于C代码的水平有多低,它实际上不在PI 2上工作(但会编译)
12 2024-04-10
编程技术问答社区
当用-O选项编译时,无法写入LD链接器脚本中定义的变量
我正在编写一个程序来运行裸金属.我正在尝试从自定义链接器脚本中写入变量.使用-O0选项编译时,该代码可完美运行,但使用-os选项编译时不预期. 我使用的代码如下. main.c: #define TTB_BASE (&Image$$TTB) extern unsigned int Image$$TTB; int main () { *TTB_BASE = 56326; unsigned int *ttb=TTB_BASE+16; for (int i = 0; i
20 2024-04-10
编程技术问答社区
不能用IAR ARM编译器将函数表强制到特定地址
我有一个函数表类型,如 typedef struct { uint16_t majorRevision; uint16_t minorRevision; uint8_t (*CommInit)(void *); uint8_t (*CommDeInit)(void); uint16_t (*Write)(uint8_t *, uint16_t); uint16_t (*Read)(uint8_t *, uint16_t); uint8_t (*Attached)(void); uint8_t (*ExitApp)(uint8_t); uint8_t (*Jump)(uint32_t address); uint16_t (*GetCRC)(uint8_t*, uint32_t); int (*Encrypt)(uint8_t *, uint32_t); int
18 2024-04-10
编程技术问答社区
getrusage在ru_utime.tv_usec和ru_utime.tv_sec中返回零。
对于以下代码getRusage在ru_utime.tv_usec和ru_utime.tv_sec中返回零. 代码: #include "stdlib.h" #include "stdio.h" #include "sys/time.h" #include "sys/resource.h" int getr_return, who = RUSAGE_SELF; struct rusage usage; main() { getr_return = getrusage(who, &usage); printf(" getr_return = %d\n", getr_return); printf(" time taken in seconds = %.61f\n", usage.ru_utime.tv_sec); printf(" time taken in seconds = %.61f\n", usage.ru_utime.tv_usec
10 2024-04-10
编程技术问答社区
修复关于C/C++和寄存器访问的知识差距
诚然,我是C ++的新手.不幸的是,我看到的大多数代码要么使用asm呼叫或定义extern函数,其主体位于汇编文件中. 这就是为什么我非常退出以找到以下代码的原因.我一直在研究句法我了解下面代码的每一行;除了重要的是因为我不明白它的工作方式! types.h定义u32和uintptr(我已经看过它们) 当C和C ++代码混合时,需要IFDEF __cplusplus.特别是因为extern C是c ++特异的.如果GCC具有-fno-exceptions参数 ,则可以省略 volatile用于防止编译器进行任何优化,因为该地址必须是完美的,因为它是写入/从寄存器中/读取的. 所有的话,我仍然不知道该代码实际上是如何写或从寄存器中读取的. #include #ifdef __cplusplus extern "C" { #endif static inline u32 read32 (uintptr nAddress) {
12 2024-04-10
编程技术问答社区
这段汇编代码没有使
我在C文件中工作,这是这样的: #define v2 0x560000a0 int main(void) { long int v1; v1 = ioread32(v2); return 0; } 我已经提取了这部分以将其写入汇编: int main () { extern v1,v2; v1=ioread32(v2); return 0; } 我正在尝试使用ARMV4的汇编代码在V1中编写V2的值.使用 arm-linux-gnueabi-gcc -S -march=armv4 assembly_file.c 我得到此代码: .arch armv4 .eabi_attribute 27, 3 .fpu vfpv3-d16 .eabi_attribute 20, 1 .eabi_attribute 21, 1 .eabi_attribute
16 2024-04-10
编程技术问答社区
用ARM汇编语言编写一个函数,将一个字符串插入到另一个字符串的特定位置。
我正在浏览班级的一本教科书,我偶然发现了这个问题: 在ARM组装语言中编写一个功能,该功能将在特定位置插入另一个字符串.该功能是: char * csinsert( char * s1, char * s2, int loc ) ; 该函数在A1中具有指向S1的指针,A2中的S2指针,以及A3中的整数,以插入在哪里.该功能将A1中的指针返回到新字符串. 您可以使用库函数strlen和malloc. strlen具有输入A1中的字符串指针,并在A1中返回长度. Malloc将为新字符串分配空间,其中A1上的A1是所请求的空间字节中的大小,并且输出A1是指向请求的空间的指针. 请记住,寄存器A1-A4不会在函数调用中保留其值. 这是我创建的字符串插入的C语言驱动程序: #include extern char * csinsert( char * s1, char * s2, int loc ) ; int main( int argc,
14 2024-04-10
编程技术问答社区
Linux寄存器读取arm i.mx257从userland-devmem不工作
我目前正在使用I.MX257平台,并想读取一些外围寄存器(特定的IOMUX寄存器),以查看如何配置或设置正确. 我也阅读了Busybox和DevMem2的Devmem.尝试了两者,都有一个错误.当前,自定义板正在从Meta-FSL-ARM YOCTO META软件包中运行Linux内核版本4.6.0-RC7.该系统是使用Yocto构建的. root@system/und./tmp/devmem2 0x43fac190 /dev/mem打开. 毫无疑问的故障:非linefetch上的外部中止(0x008)在0xB6F3A190上 PGD​​ = C3334000 [B6F3A190] *PGD = 8285E831, *PTE = 43FAC103, *PPTE = 43FACAA2 映射在地址0xb6f3a000的内存. 巴士错误 该工具会获得信号错误. config_strict_devmem选项未在内核配置中设置. 我找到了另一篇文章 htt
10 2024-04-10
编程技术问答社区
在A中包括一个标头文件以获取一些结构尺寸
我正在尝试编译混合的C代码和一个汇编代码项目,同时尝试在.s文件和某些标头文件之间共享信息时,我遇到了一个问题. 我创建了两个文件,如下: asm.s: #include "common.h" .space SOME_STRUCT_SIZE .word SOME_MAGIC .globl main b start start: ; ... code here common.h: struct someStruct { int data; }; #define SOME_STRUCT_SIZE sizeof(struct someStruct) #define SOME_MAGIC 0x12345678 尝试编译.s文件(arm-linux-gnueabi-gcc -o asm asm.S)时,我会收到指示汇编器试图组装.H文件的错误消息,并且显然在struct定义上失败. common.h: Assembler messages
8 2024-04-10
编程技术问答社区
如何在没有jtag、断点、模拟器、仿真器的情况下在目标上进行单步代码。
假设您有一个指针到达函数的指针,因为它可能读取/写入为不允许的内存区域,因此"不信任". 在执行每个汇编指令之前,您要验证它无法访问不允许的内存区域. OS是(几乎)裸机,即自定义RTO(因此没有Linux或QNX). 这是用于不仅需要在开发期间而且在正常运行时启用的功能. 理想情况下,它会运行类似的东西: void (*fptr)(int); fptr = &someFunction; // untrusted, don't have source // enable interrupts for each assembly instruction _EN_INT(); // call the function fptr(); // everytime the PC increments, some other code runs which verifies that if any load/stores are executed, it doesn't
16 2024-04-10
编程技术问答社区
在ARM Cortex M4处理器中,测试C代码中的错误SEGV对耗时的影响
我正在为我的STM32F429板的嵌入式操作系统编写代码.我正在测试此代码的经过时间: #include #include #include #include #include #include #define DEFAULT_DELAY 1 uint32_t m_nStart; //DEBUG Stopwatch start cycle counter value uint32_t m_nStop; //DEBUG Stopwatch stop cycle counter value #define DEMCR_TRCENA 0x01000000 /* Core Debug registers */ #define DEMCR (*((volatile ui
16 2024-04-10
编程技术问答社区
ARM Cortex-M处理器的硬故障处理中的冗余代码
来自 freertos.org 关于调试硬故障和其他例外 在ARM Cortex-M3和ARM Cortex-M4微控制器上,根据Freertos的说法,我们可以使用以下代码来调试ARM Cortex-M Hard Budd- /* The fault handler implementation calls a function called prvGetRegistersFromStack(). */ static void HardFault_Handler(void) { __asm volatile ( " tst lr, #4 \n" " ite eq \n" " mrseq r0, msp
16 2024-04-10
编程技术问答社区
图像处理中的边界检查
我想在处理图像处理中的任何过滤器时照顾边界条件.我正在推断边界并创建新边界.例如,我有4x3输入: //Input int image[4][3] = 1 2 3 4 2 4 6 8 3 6 9 12 //Output int extensionimage[6][5] = 1 1 2 3 4 4 1 1 2 3 4 4 2 2 4 6 8 8 3 3 6 9 12 12 3 3 6 9 12 12 我的代码: #include #include #include void padd_border(int *img,int *extension,int width,int height); int main(){ int width = 4,height = 3; int *img = new int[(width) * (height)]; for(int j =
2 2024-04-10
编程技术问答社区
链接时加载符号文件
我正在尝试在链接时加载符号文件.我正在提供符号.txt文件以及我链接的其他库.这是我尝试的两件事. 1st,我完全提供了符号文件,完全作为无臂-NON-EABI-NM的输出是什么,但是在第1行本身上以语法错误返回. 第二,我更改了格式.我在文件开头添加了##,并进行了更改以遵循ARM的Symdef文件格式.这给了我错误 未识别的文件:未识别的文件格式 collect2.exe:错误:ld返回1退出状态 有人在将符号文件加载到链接器(臂无abi-ld)方面是否有任何经验?如果是,请帮助我弄清楚我缺少的内容. 我的符号文件的前几行如下: "##";这里没有"我用它来删除标记 0x00000000 a __heap_size 0x00000000 r __vect_table 0x00000000 r __vector_table 0x00000074 a ___data_size 我知道这种格式可与Armlink一起使用
12 2024-04-10
编程技术问答社区
我如何在Linux子系统的VSCode上运行汇编(.s)文件?
我刚开始进行手臂编程.学会了一些基础知识,但是在运行代码方面遇到问题.我在Linux子系统上使用VSCODE作为我的IDE. 我的计算机上没有安装任何安装,我想运行ARM代码.我已经在线阅读了一些有关" qemu "和" kernel "等内容的信息,但不确定它们的意思.如果有人为这样一个问题提供详细的演练,那将是很棒的. 我没有覆盆子pi . 例如,如何在VSCODE上运行以下division.s文件? .global _start _start: MOV R1, #X MOV R2, #Y MOV R3, #Z CMP R1, R2 @ is x>y ? BGT _tryx CMP R2, R3 @ is y>z ? BGT _isy MOV R4, R3 B _exit _isy: MOV R4, R2
14 2024-04-09
编程技术问答社区