使用AI的能力编译ARM版本RDM

前言

笔者使用M芯片的mac电脑,在27寸的4k显示器,使用2048的缩放,可以开启hidpi,且显示大小合适,观感舒适,当然使用5k显示器效果最佳。毕竟mac自己出了5k的imac pro。笔者使用开源项目rdm:RDM,但是RDM的作者已经不维护了。目前分发版本只有x86的Intel版本,想着反正是C++代码,是不是自己在M芯片的电脑上编译一下就行了,来试试,开干。

准备

下载RDM源码:https://github.com/avibrazil/RDM

可以看到这个项目还是很火的,基本上大部分是C++写的

重点关注makefile和license

这个是无任何协议说明的,根据这段说明,可以使用,看看Makefile

这个要改,使用man uname看看

试试,为arm64

先改一下

笔者虽然懂C++,但是没有任何系统桌面软件开发经验,先make试试效果

使用AI

首次make,跳坑,说识别不了display这个定义

./utils.h:26:51: error: use of undeclared identifier 'display'; did you mean 'eDisplay'?
   26 |         void CGSGetCurrentDisplayMode(CGDirectDisplayID display, int* modeNum);
      |                                                         ^~~~~~~
      |                                                         eDisplay
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/AE.framework/Headers/AERegistry.h:949:3: note: 'eDisplay' declared here
  949 |   eDisplay                      = 'edds',
      |   ^
In file included from cmdline.mm:5:
./utils.h:26:8: error: variable has incomplete type 'void'
   26 |         void CGSGetCurrentDisplayMode(CGDirectDisplayID display, int* modeNum);
      |              ^
./utils.h:26:33: error: use of undeclared identifier 'CGDirectDisplayID'
   26 |         void CGSGetCurrentDisplayMode(CGDirectDisplayID display, int* modeNum);
      |                                       ^
./utils.h:26:63: error: expected '(' for function-style cast or type construction
   26 |         void CGSGetCurrentDisplayMode(CGDirectDisplayID display, int* modeNum);
      |                                                                  ~~~^
./utils.h:26:65: error: use of undeclared identifier 'modeNum'
   26 |         void CGSGetCurrentDisplayMode(CGDirectDisplayID display, int* modeNum);
      |                                                                       ^
./utils.h:27:76: error: use of undeclared identifier 'display'; did you mean 'eDisplay'?
   27 |         void CGSConfigureDisplayMode(CGDisplayConfigRef config, CGDirectDisplayID display, int modeNum);
      |                                                                                   ^~~~~~~
      |                                                                                   eDisplay
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/AE.framework/Headers/AERegistry.h:949:3: note: 'eDisplay' declared here
  949 |   eDisplay                      = 'edds',
      |   ^
In file included from cmdline.mm:5:
./utils.h:27:7: error: variable has incomplete type 'void'
   27 |         void CGSConfigureDisplayMode(CGDisplayConfigRef config, CGDirectDisplayID display, int modeNum);
      |              ^
./utils.h:27:31: error: use of undeclared identifier 'CGDisplayConfigRef'
   27 |         void CGSConfigureDisplayMode(CGDisplayConfigRef config, CGDirectDisplayID display, int modeNum);
      |                                      ^
./utils.h:27:58: error: use of undeclared identifier 'CGDirectDisplayID'
   27 |         void CGSConfigureDisplayMode(CGDisplayConfigRef config, CGDirectDisplayID display, int modeNum);
      |                                                                 ^
./utils.h:27:89: error: expected '(' for function-style cast or type construction
   27 |         void CGSConfigureDisplayMode(CGDisplayConfigRef config, CGDirectDisplayID display, int modeNum);
      |                                                                                            ~~~ ^
./utils.h:28:52: error: use of undeclared identifier 'display'; did you mean 'eDisplay'?
   28 |         void CGSGetNumberOfDisplayModes(CGDirectDisplayID display, int* nModes);
      |                                                           ^~~~~~~
      |                                                           eDisplay
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/AE.framework/Headers/AERegistry.h:949:3: note: 'eDisplay' declared here
  949 |   eDisplay                      = 'edds',
      |   ^
In file included from cmdline.mm:5:
./utils.h:28:7: error: variable has incomplete type 'void'
   28 |         void CGSGetNumberOfDisplayModes(CGDirectDisplayID display, int* nModes);
      |              ^
./utils.h:28:34: error: use of undeclared identifier 'CGDirectDisplayID'
   28 |         void CGSGetNumberOfDisplayModes(CGDirectDisplayID display, int* nModes);
      |                                         ^
./utils.h:28:64: error: expected '(' for function-style cast or type construction
   28 |         void CGSGetNumberOfDisplayModes(CGDirectDisplayID display, int* nModes);
      |                                                                    ~~~^
./utils.h:28:66: error: use of undeclared identifier 'nModes'; did you mean 'eModem'?
   28 |         void CGSGetNumberOfDisplayModes(CGDirectDisplayID display, int* nModes);
      |                                                                         ^~~~~~
      |                                                                         eModem
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/AE.framework/Headers/AERegistry.h:967:3: note: 'eModem' declared here
  967 |   eModem                        = 'edmm',
      |   ^
In file included from cmdline.mm:5:
./utils.h:29:62: error: use of undeclared identifier 'display'; did you mean 'eDisplay'?
   29 |         void CGSGetDisplayModeDescriptionOfLength(CGDirectDisplayID display, int idx, modes_D4* mode, int length);
      |                                                                     ^~~~~~~
      |                                                                     eDisplay
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreServices.framework/Frameworks/AE.framework/Headers/AERegistry.h:949:3: note: 'eDisplay' declared here
  949 |   eDisplay                      = 'edds',

根据GLM AI诊断:这个是由于.h文件的定义缺失引用,另外定义的变量名称不一致,因为继承的C,AI还说这个是macOS display的私有API啥的

那么我们在utils.h加入引用,修改变量名

#ifndef UTILS_H
#define UTILS_H

#include <CoreGraphics/CGDirectDisplay.h>
#include <CoreGraphics/CoreGraphics.h>
#include <CoreGraphics/CGDisplayConfiguration.h>


typedef union
{
	uint8_t rawData[0xDC];
	struct 
	{
		uint32_t mode;
		uint32_t flags;		// 0x4
		uint32_t width;		// 0x8
		uint32_t height;	// 0xC
		uint32_t depth;		// 0x10
		uint32_t dc2[42];
		uint16_t dc3;
		uint16_t freq;		// 0xBC
		uint32_t dc4[4];
		float density;		// 0xD0
		// freq = 0xBC
		// density = 0xD0
	//	uint32_t freq;
	} derived;
} modes_D4;

extern "C"
{
 	void CGSGetCurrentDisplayMode(CGDirectDisplayID displayID, int* modeNum);
	void CGSConfigureDisplayMode(CGDisplayConfigRef config, CGDirectDisplayID displayID, int modeNum);
	void CGSGetNumberOfDisplayModes(CGDirectDisplayID displayID, int* nModes);
	void CGSGetDisplayModeDescriptionOfLength(CGDirectDisplayID displayID, int idx, modes_D4* mode, int length);
};


void CopyAllDisplayModes(CGDirectDisplayID displayID, modes_D4** modes, int* cnt);
void SetDisplayModeNum(CGDirectDisplayID displayID, int modeNum);

#endif

这里的#if 和#endif,是AI说防止定义冲突啥的,建议使用运行时代码选择编译,说的有道理就加上了

然后执行make clean清理刚刚的编译

再执行make,成功,双击试试效果

效果如下:可以使用,原生ARM应用

遗留问题

遗留问题:

SRApplicationDelegate.mm:77:22: warning: 'NSOnState' is deprecated: first deprecated in macOS 10.14 [-Wdeprecated-declarations]
   77 |                                         [item setState: NSOnState];
      |                                                         ^~~~~~~~~
      |                                                         NSControlStateValueOn
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h:355:34: note: 'NSOnState' has been explicitly marked deprecated here
  355 | static const NSControlStateValue NSOnState API_DEPRECATED_WITH_REPLACEMENT("NSControlStateValueOn", macos(10.0,10.14)) = NSControlStateValueOn;
      |                                  ^
SRApplicationDelegate.mm:161:22: warning: 'NSOnState' is deprecated: first deprecated in macOS 10.14 [-Wdeprecated-declarations]
  161 |                                         [item setState: NSOnState];
      |                                                         ^~~~~~~~~
      |                                                         NSControlStateValueOn
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSCell.h:355:34: note: 'NSOnState' has been explicitly marked deprecated here
  355 | static const NSControlStateValue NSOnState API_DEPRECATED_WITH_REPLACEMENT("NSControlStateValueOn", macos(10.0,10.14)) = NSControlStateValueOn;
      |                                  ^
SRApplicationDelegate.mm:247:14: warning: 'setImage:' is deprecated: first deprecated in macOS 10.14 - Use the receiver's button.image instead [-Wdeprecated-declarations]
  247 |         [statusItem setImage: statusImage];
      |                     ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:75:39: note: property 'image' is declared deprecated here
   75 | @property (nullable, strong) NSImage *image API_DEPRECATED("Use the receiver's button.image instead", macos(10.0,10.14));
      |                                       ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:75:39: note: 'setImage:' has been explicitly marked deprecated here
SRApplicationDelegate.mm:248:14: warning: 'setHighlightMode:' is deprecated: first deprecated in macOS 10.14 - Use the receiver's button.cell.highlightsBy instead [-Wdeprecated-declarations]
  248 |         [statusItem setHighlightMode: YES];
      |                     ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:78:16: note: property 'highlightMode' is declared deprecated here
   78 | @property BOOL highlightMode API_DEPRECATED("Use the receiver's button.cell.highlightsBy instead", macos(10.0,10.14));
      |                ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:78:16: note: 'setHighlightMode:' has been explicitly marked deprecated here
SRApplicationDelegate.mm:252:18: warning: 'image' is deprecated: first deprecated in macOS 10.14 - Use the receiver's button.image instead [-Wdeprecated-declarations]
  252 |     [[statusItem image] setTemplate:YES];
      |                  ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:75:39: note: property 'image' is declared deprecated here
   75 | @property (nullable, strong) NSImage *image API_DEPRECATED("Use the receiver's button.image instead", macos(10.0,10.14));
      |                                       ^
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSStatusItem.h:75:39: note: 'image' has been explicitly marked deprecated here
5 warnings generated.

有些废弃类,笔者可以自己修改一下,比如可以完全替代的NSOnState使用NSControlStateValueOn,这个比较好改,而且完全兼容,直接替换即可。其他让AI来修改,代码如下:SRApplicationDelegate.mm



#import <Foundation/Foundation.h>
#import <AppKit/AppKit.h>

#import "SRApplicationDelegate.h"

#import "utils.h"
#import "ResMenuItem.h"






@implementation SRApplicationDelegate

- (void) showAbout
{
  [NSApp activateIgnoringOtherApps:YES];
  [NSApp orderFrontStandardAboutPanel:self];
}


- (void) quit
{
	[NSApp terminate: self];
}



- (void) refreshStatusMenu
{
	if(statusMenu)
		[statusMenu release];
	
	statusMenu = [[NSMenu alloc] initWithTitle: @""];
	
	uint32_t nDisplays;
	CGDirectDisplayID displays[0x10];
	CGGetOnlineDisplayList(0x10, displays, &nDisplays);
	
	for(int i=0; i<nDisplays; i++)
	{
		CGDirectDisplayID display = displays[i];
		{
			NSMenuItem* item;
			NSString* title = i ? [NSString stringWithFormat: @"Display %d", i+1] : @"Main Display";
			item = [[NSMenuItem alloc] initWithTitle: title action: nil keyEquivalent: @""];
			[item setEnabled: NO];
			[statusMenu addItem: item];
		}
		
		
		int mainModeNum;
		CGSGetCurrentDisplayMode(display, &mainModeNum);
		//modes_D4 mainMode;
		//CGSGetDisplayModeDescriptionOfLength(display, mainModeNum, &mainMode, 0xD4);
		ResMenuItem* mainItem = nil;
		
		
		int nModes;
		modes_D4* modes;
		CopyAllDisplayModes(display, &modes, &nModes);
		
		{
			NSMutableArray* displayMenuItems = [NSMutableArray new];
			//ResMenuItem* mainItem = nil;
			
			for(int j = 0; j <nModes; j++)
		    {
				ResMenuItem* item = [[ResMenuItem alloc] initWithDisplay: display andMode: &modes[j]];
				//[item autorelease];
				if(mainModeNum == j)
				{
					mainItem = item;
					[item setState: NSControlStateValueOn];
				}
				[displayMenuItems addObject: item];
				[item release];
			}
			int idealColorDepth = 32;
			double idealRefreshRate = 0.0f;
			if(mainItem)
			{
				idealColorDepth = [mainItem colorDepth];
				idealRefreshRate = [mainItem refreshRate];
			}
			[displayMenuItems sortUsingSelector: @selector(compareResMenuItem:)];
		
		
			NSMenu* submenu = [[NSMenu alloc] initWithTitle: @""];
			
			ResMenuItem* lastAddedItem = nil;
			for(int j=0; j < [displayMenuItems count]; j++)
			{
				ResMenuItem* item = [displayMenuItems objectAtIndex: j];
				if([item colorDepth] == idealColorDepth)
				{
					if([item refreshRate] == idealRefreshRate)
					{
						[item setTextFormat: 1];
					}
					
					if(lastAddedItem && [lastAddedItem width]==[item width] && [lastAddedItem height]==[item height] && [lastAddedItem scale]==[item scale])
					{
						double lastRefreshRate = lastAddedItem ? [lastAddedItem refreshRate] : 0;
						double refreshRate = [item refreshRate];
						if(!lastAddedItem || (lastRefreshRate != idealRefreshRate && (refreshRate == idealRefreshRate || refreshRate > lastRefreshRate)))
						{
							if(lastAddedItem)
							{
								[submenu removeItem: lastAddedItem];
								lastAddedItem = nil;
							}
							[submenu addItem: item];
							lastAddedItem = item;
						}
					}
					else
					{	
						[submenu addItem: item];
						lastAddedItem = item;
					}
				}
			}
			
			NSString* title;
			{
				if([mainItem scale] == 2.0f)
				{
					title = [NSString stringWithFormat: @"%d × %d ⚡️️", [mainItem width], [mainItem height]];
				}
				else
				{
					title = [NSString stringWithFormat: @"%d × %d", [mainItem width], [mainItem height]];
				}
			}
			
			
			NSMenuItem* resolution = [[NSMenuItem alloc] initWithTitle: title action: nil keyEquivalent: @""];
			[resolution setSubmenu: submenu];
			[submenu release];
			[statusMenu addItem: resolution];
			[resolution release];
			
			[displayMenuItems release];
		}
		
		{
			NSMutableArray* displayMenuItems = [NSMutableArray new];
			ResMenuItem* mainItem = nil;
			for(int j = 0; j < nModes; j++)
		    {
				ResMenuItem* item = [[ResMenuItem alloc] initWithDisplay: display andMode: &modes[j]];
				[item setTextFormat: 2];
				//[item autorelease];
				if(mainModeNum == j)
				{
					mainItem = item;
					[item setState: NSControlStateValueOn];
				}
				[displayMenuItems addObject: item];
				[item release];
			}
			int idealColorDepth = 32;
			double idealRefreshRate = 0.0f;
			if(mainItem)
			{
				idealColorDepth = [mainItem colorDepth];
				idealRefreshRate = [mainItem refreshRate];
			}
			[displayMenuItems sortUsingSelector: @selector(compareResMenuItem:)];
			
			
			NSMenu* submenu = [[NSMenu alloc] initWithTitle: @""];
			for(int j=0; j< [displayMenuItems count]; j++)
			{
				ResMenuItem* item = [displayMenuItems objectAtIndex: j];
				if([item colorDepth] == idealColorDepth)
				{
					if([mainItem width]==[item width] && [mainItem height]==[item height] && [mainItem scale]==[item scale])
					{
						[submenu addItem: item];
					}
				}
			}
			if(idealRefreshRate)
			{
				NSMenuItem* freq = [[NSMenuItem alloc] initWithTitle: [NSString stringWithFormat: @"%.0f Hz", [mainItem refreshRate]] action: nil keyEquivalent: @""];
			
				if([submenu numberOfItems] > 1)
				{
					[freq setSubmenu: submenu];
				}
				else
				{
					[freq setEnabled: NO];
				}
				[statusMenu addItem: freq];
				[freq release];
			}
			[submenu release];
			
			[displayMenuItems release];
			
		}
		
		
		free(modes);
		
		
		[statusMenu addItem: [NSMenuItem separatorItem]];
	}
	
	[statusMenu addItemWithTitle: @"About RDM" action: @selector(showAbout) keyEquivalent: @""];
	
	
	[statusMenu addItemWithTitle: @"Quit" action: @selector(quit) keyEquivalent: @""];
	[statusMenu setDelegate: self];
	[statusItem setMenu: statusMenu];
}


- (void) setMode: (ResMenuItem*) item
{
	CGDirectDisplayID display = [item display];
	int modeNum = [item modeNum];
	
	SetDisplayModeNum(display, modeNum);
	/*
	
	CGDisplayConfigRef config;
    if (CGBeginDisplayConfiguration(&config) == kCGErrorSuccess) {
        CGConfigureDisplayWithDisplayMode(config, display, mode, NULL);
        CGCompleteDisplayConfiguration(config, kCGConfigureForSession);
    }*/
	[self refreshStatusMenu];
}

- (void) applicationDidFinishLaunching: (NSNotification*) notification
{
//	NSLog(@"Finished launching");
	statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength: NSSquareStatusItemLength] retain];
	
	NSImage* statusImage = [NSImage imageNamed: @"StatusIcon"];
	[statusItem.button setImage: statusImage];
	[statusItem.button.cell setHighlightsBy: NSPushInCellMask];

  BOOL supportsDarkMenu = !(floor(NSAppKitVersionNumber) < 1343);  // NSAppKitVersionNumber10_10
  if (supportsDarkMenu) {
    [[statusItem.button image] setTemplate:YES];
  }

	[self refreshStatusMenu];
	
}

@end

试试效果:

完美,效果OK,其实看提示也能修改,但是笔者毕竟没写过object-c代码。

总结

这次使用AI把开源的RDM软件实现了ARM编译,借助AI修改了其中utils.h文件实现了原生M芯片应用,毕竟macOS 26之后要废弃转移x86的能力,证明了AI在小项目的强大之处,如果项目复杂,笔者即使使用AI也搞不定,毕竟不懂桌面APP的开发。

附上笔者编译的app附件,见文章附件

Pharma Labs采取的Anthropic 模型硬件需求 来自IntuitionLabs的论文“Anthropic Model Hardware Requirements for Pharma Labs”。IntuitionLabs 是一家面向药企和生物技术公司的 AI 咨询与软件服务公司(2026 年 9 月 19 日)。 阅读详情

相关推荐

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 395

Redis Desktop Manager(Redis可视化工具)安装

Redis Desktop Manager(Redis可视化工具)安装

atajt的博客 506

RDM(radis桌面工具)

RDM(Redis Desktop Manager)是一款专为Redis数据库设计的图形化管理工具。它提供了直观、友好的用户界面,使用户能够方便地连接、管理和操作Redis数据库。RDM支持多种操作系统,如Windows、Mac和Linux,满足不同用户的需求。通过RDM,用户可以轻松浏览、编辑、删除和添加Redis数据库中的键值对,同时支持数据导入导出、实时监控和性能分析等功能。此外,RDM还支持直接在界面中执行Redis命令,极大地简化了操作流程。无论是Redis的初学者还是资深用户,RDM都能帮助提升工作效率,是管理Redis数据库的得力助手。

ARM64(AArch64) 机器的 CPU 特性列表

这是台机器的 CPU 特性列表。每一行是一个核的同样能力,所以会重复出现。按功能块给你展开说明,并说下对常见工作负载(数据库/加密/压缩/ML 等)的意义,以及如何验证和利用这些特性。

喝醉酒的小白 1037

GPU计算板卡设计原理图:735-基于3U VPX的AGX Xavier GPU计算主板

基于3U VPX的 Jetson AGX Xavier GPU计算主板是LINUX环境下软件开发等理想工具。是用于视频处理,相机信号,支持PCIE、USB、RS422、RS232、网口、SPI、I2C等综合性的信号计算主板。3. 支持外接HDMI连接显示器,并支持键盘,鼠标等外接设备进行调试。8 核 ARM v8.2 64 位 CPU、8 MB L2 + 4 MB L3。4路Gigabit Ethernet (10/100/100)link。1路RS232,1路RS485。1路 NVMe PCIeX4。

980

计算机网络实验(华为eNSP模拟器)——第十章 Eth-Trunk(链路聚合)

目录一、Eth-Trunk的定义二、Eth-Trunk的工作模式(一)LACP模式1、定义2、命令(二)手工负载分担模式1、定义2、命令三、结语 一、Eth-Trunk的定义 Eth-Trunk是指设备的链路聚合,即将该设备的多个接口捆绑成一个接口,从而达到了增加带宽和提高可靠性的目的。我们要注意它是将多条物理链路,在逻辑上合并成一条,而不是串在一起。例我们将LSW1交换机S5700的三个端口(即GE0/0/1 、GE0/0/2、GE0/0/3)定义为一个Eth-Trunk接口与LSW2交换机相连,如下:

小宇y的博客 8414

DBX 中文技术指南:25 MB 轻量级数据库客户端的完整实践——从桌面端、Docker 到 AI 与 MCP

DBX 是一款用 Rust 构建的开源(Apache-2.0)跨平台数据库管理工具,以单个约 25 MB 的二进制文件支撑 90+ 种数据库的连接与管理,无需 Java、Python 或内嵌 Chromium 等运行时依赖。本指南以仓库根目录 [README.zh-CN.md](https://link.gitcode.com/i/4626bf63bf73b8d734d982e94748f523)

gitblog_00884的博客 822

TOD和PPS精确时间同步技术

授时

u010783226的专栏 1万+

FlagOS芯片语义建模实现八芯Day0统一适配

操作系统与硬件芯片的深度协同是嵌入式系统开发的核心基础。从传统BSP手动适配到结构化语义建模,本质是将芯片手册中的非结构化寄存器定义、时序约束与状态机逻辑,转化为可验证、可复用的元描述模型。这一范式升级显著提升驱动开发效率与跨平台一致性,支撑RISC-V、ARM等多架构芯片的快速集成,并为实时性保障、确定性调度和能力抽象层(UDAL)提供底层语义支撑。在工业控制、车规MCU及边缘AI SoC等对软硬协同要求严苛的场景中,芯片语义建模正成为国产操作系统突破‘可用’迈向‘可信可演进’的关键技术支点。

weixin_33462167的博客 359

第2章 数据库关系模型-单元测验-数据库原理及应用

第2章 数据库关系模型---数据库与机器学习 作业 常用的关系查询操作包括选择、投影、连接、并、交等。 v 实体完整性是指关系表的属性组成必须是完整的。 x 自然连接是一种等值连接。 v 在参照完整性中,可以定义级联操作。 v 用户自定义完整性可以实施数据的业务约束。 v 每个关系是一个二维表,但二维表不一定是关系。 v 关系中复合键至少包含两个属性。 v 代理键是为了唯一标识关系的不同元组,需要在表单或报表中显示出来。 x ...

aiqq136的博客 5723

SpringBoot 通过 JMS 集成 IBM MQ

IBM MQ 作为老牌的企业级消息中间件,虽然在当下云原生时代已不再是主流选择,但在金融、银行、保险等传统行业的核心业务系统中仍然占据着重要地位。这些行业对系统的稳定性、可靠性和事务一致性有着极高的要求,IBM MQ 正是在这些方面表现出色。尽管近年来 RabbitMQ、Apache Kafka 等新一代消息中间件在新兴项目中更受欢迎,但许多金融公司和大型企业仍在使用 IBM MQ 作为核心业务系统的消息传递基础设施。

小单的博客专栏 945

STranslate 桌面翻译工具:3步跑通划词翻译与截图OCR识别

阅读外文资料时,光标停在生词上,你却不想切窗口去复制。STranslate 是一款基于 WPF 的轻量级桌面翻译工具,划词或截图 OCR 后直接弹出译文,还支持文本转语音朗读,解压即用。 ## STranslate 功能定位与适用场景 STranslate 是"要时就用、不用就收"的桌面翻译工具,一个窗口解决三件事:**划词翻译**、**截图 OCR 识别**、结果**文本转语音**朗读。适合

gitblog_00007的博客 71

电力电子技术复习笔记

通常在开关过程前后加入谐振,使开关开通前电压先降到0,关断前电流先降到0,消除开关过程电压、电流的重叠,降低它们的变化率,从而大大减小甚至消除开关损耗。小信号线性化模型的原理:忽略开关频率分量和开关频率谐波分量及其边频分量,建立占空比、输入电压等的低频扰动对变换器中的电压、电流影响的模型。解:可以利用变压器的变比改变输出电压大小,避免控制过程的占空比过小或过大,提高控制精度,同时有利于减轻输出电路中电力电子器件的耐压要求。驱动电路:用于控制功率半导体器件的开关,从而控制电路的电流和电压。

Miracle Fan的博客 1万+

DeepSeek Harness桌面端:开箱即用的大模型本地化实践

大模型本地化部署的核心挑战在于降低终端用户使用门槛,实现从‘能跑’到‘敢用’的跨越。Electron凭借跨平台一致性、系统级能力访问与前端生态复用优势,成为当前最务实的桌面载体技术选型;其封装能力有效屏蔽Python环境配置、CUDA驱动适配、模型加载校验等底层复杂性,让非开发者也能一键安装、双击启动、流式对话。结合模型完整性校验、进程隔离设计与渐进式降级机制,DeepSeek Harness桌面端构建了可验证、可审计、可恢复的本地AI信任链路,适用于科研实验、边缘推理、离线办公等真实场景。

weixin_29055699的博客 187

Sparse-ICP—(4) 加权稀疏迭代最近点算法(matlab版)

本文介绍了加权稀疏迭代最近点算法的实现。

点云侠的博客 641

PostgreSQL:Patroni 高可用架构,基于etcd的自动故障转移集群

本文详细介绍了基于Patroni和etcd构建PostgreSQL高可用集群的方案。Patroni作为外部守护进程,通过etcd分布式协调服务实现自动故障转移、主节点选举等关键功能,弥补了PostgreSQL原生缺乏自动故障转移的不足。文章涵盖核心架构(3节点PG+3节点etcd)、环境规划、etcd集群部署(包括配置验证)以及Patroni安装配置的关键步骤,特别强调了Patroni自动初始化PG实例、配置同步复制等生产级特性。该方案通过外部组件协同工作,在不修改PG源码的情况下实现了生产环境所需的高可用

数据知道的博客 2486

Q8量化CPU推理:让Llama3/Qwen2在i5笔记本上秒级响应

大语言模型推理不再依赖GPU,CPU本地化部署正成为教育、边缘计算与个人开发的关键路径。基于INT8量化、AVX-512/VNNI指令加速与内存映射分页加载等核心技术,Q8-Chat实现了7B–13B模型在主流Intel CPU上的低延迟高吞吐推理——首token<800ms、持续生成达9+ tokens/s。其核心价值在于平衡精度与效率,在AlpacaEval和MT-Bench中精度衰减仅1.2%,显著优于Q4方案;同时兼容Linux/WSL2环境,无需驱动或云服务。适用于高校AI教学、嵌入式RAG系统及

chiman6219的博客 389

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

指纹识别传感器驱动开发—【万物智能之开源鸿蒙OpenHarmony系统实战开发系列教程】

本文详述在RK3568平台使用私有二进制协议指纹模组的调试要点:以亮灯确认通信为首要步骤,波特率固定为57600,通过tcflush(TCIFLUSH)清除缓冲避免旧应答干扰;严格按“连接→亮灯→录入→比对”顺序操作,依赖包头F11FE22E锚定帧,校验标记与状态(成功为0E,0F为已存在);以灯亮为准选择正确TTY(如ttyS8非ttyS7),禁用CRTSCTS,应用层采用异步poll机制,避免误判。强调硬件层面断电重连、权限配置及单路排针原则,确保通信稳定可靠。

wanwuzhineng_01的博客 344

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

为什么学习率预热(warmup)能显著改善Transformer等大模型的训练稳定性?

t$ 的分母 $(1-\beta_2^t)$ 极小,导致方差估计值波动剧烈。若此时 $\eta$ 较大,更新步长 $\Delta \theta$ 将不可控。Adam 优化器的参数更新公式为 $\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}{warmup}$ 时人为压低 $\eta_t$,从而保证 $\Delta \theta$ 的数值稳定性。在训练初期($t$ 很小),$\hat{v}{warmup}}$,在 $t < T。

2402_84593233的博客 176

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

自建云手机,ARM服务器和X86服务器怎么选?架构差异、成本、兼容性全对比

小体量、试验证选 X86;大规模、追求稳定和兼容性选 ARM。ARM 原生是云手机技术的主流方向,但不等于人人都适合自建 ARM 集群。评估的时候,不要只看服务器单价,把后续运维、电费、排错成本一起算进去,再决定是自建,还是直接使用成熟的云手机服务。

a598652的博客 300

轨交车载 ARM+FPGA+AI 控制单元:宽温、振动、EMC、可靠性设计

❌ 把 EtherCAT 主站、安全采集放在 ARM Linux 里,PREEMPT_RT 再怎么调,振动 + EMC 叠加下依然有概率丢帧 ✅ 总线时序、同步采集交给 FPGA,ARM 只做协议栈解析❌ AI 算力卡直接挂在 ARM 总线上、无隔离,NPU 大电流波动污染电源,导致 FPGA 采集漂移 ✅ AI 卡独立隔离电源,PCIe 增加隔离 / 缓冲,FPGA 侧做电源质量监控❌ 盲目上全机冗余,成本暴涨;

szxinmai的博客 120

Zynq 的 AXI GPIO,是“ARM 通过一条国际标准高速公路(AXI 总线),去遥控 FPGA 里的一个寄存器”。---deepseek

同学,你现在看 AXI GPIO,它还仅仅是个点灯的工具吗?它是Zynq 软硬协同的“微缩景观”。它告诉我们:在 Zynq 的世界里,ARM 通过 AXI 总线,把“软件控制”变成了“硬件动作”。你懂了 AXI GPIO,就懂了 AXI DMA、AXI 中断的底层原理。它们全都是通过 AXI 总线,把数据或信号从 PS 端(软件)搬到 PL 端(硬件)。内存映射 + AXI 握手。你的代码之所以可靠,是因为背后有极其严密的总线协议在兜底。

AlibabaApple的博客 471

AllData 可定义数据中台完成信创适配|银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地

银河麒麟 + 海光X86 CPU / 华为鲲鹏ARM CPU+ OceanBase / 人大金仓国产化环境部署落地

AllDataDC的博客 238

Dharma Field Extractor 解读:让 2B 专用模型按 Schema 从文档图像抽取 JSON

解读 Dharma Field Extractor 的 schema 字段抽取、训练路线、评测指标与部署边界。

m_aigc2022的博客 373

ARM 内存管理

最早期的计算机,程序是打在卡片上的,CPU 读一张卡片执行一条指令,效率极低。后来有了内存,程序要先加载到内存再执行,也就是 “存储程序” 概念,这才开启了操作系统的发展。1. 单道编程的内存管理2. 多道编程的内存管理:解决 “同时跑多个程序” 的问题为了提升资源利用率,出现了。

qq_52240295的博客 319

ARM高密度云手机集群,网络与端口隔离配置方案

在 ARM 服务器搭建 Redroid/KVM 安卓实例集群时,很多开发者前期只关注 CPU、内存、GPU 渲染性能,很容易忽略网络隔离问题。实例之间互通无限制,内部流量横向访问,存在测试数据互相污染;ADB、VNC、Scrcpy 端口冲突,端口管理混乱;所有实例共用同一个出口 IP,在测试场景下容易被目标服务判定为同源环境;单实例网络风暴、异常流量抢占整台服务器带宽资源。

a598652的博客 233
上一篇: MySQL单表分页优化
下一篇: 使用AI能力编译ARM版本的截图软件
fenglllle
博客等级 码龄8年 461粉丝 242原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值