KEIL ARM 6.12 compiler 编译__ASM 错误的解决方法

博客内容讲述了KEIL编译器从默认版本升级到V6.12后,遇到汇编和C混合代码的编译问题,具体表现为不识别__ASM关键字并报错。解决方法是按照V6.12的格式要求修改汇编代码,将原本的汇编函数改为使用__ASM关键字内联汇编,从而实现编译通过。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、问题

KEIL compiler 设置为 “use default compiler version 5” 可以正确编译以下汇编和C混合代码,更改编译器为V6.12后不识别__ASM关键字,并对汇编语法报错。

 替换为

__ASM void MSR_MSP(uint32_t addr)
{
    MSR MSP, r0 
    BX r14
}

2、解决办法

6.12编译器对于汇编和C的混合代码格式做了要求,按照以下方式修改汇编代码,即可编译通过。

void MSR_MSP(uint32_t addr) 
{
    __ASM("MSR MSP, r0"); 
    __ASM("BX r14");
}

 

### 解决 MobaXterm SSH 连接 “Access Denied” 的方案 当遇到 MobaXterm 创建 SSH 连接到 Ubuntu 虚拟机时提示 "Access Denied"[^1],可以按照以下建议排查和解决问题。 #### 1. 验证 SSH 服务器状态和服务 确保目标机器上的 SSH 服务已经正确安装并运行。可以通过命令 `systemctl status sshd` 来检查 SSHD 服务的状态[^4]。如果没有安装,则需执行 `sudo yum install openssh-server` 安装 OpenSSH Server。接着启动该服务并通过 `sudo systemctl start sshd` 和设置其随系统启动而自动开启 `sudo systemctl enable sshd`。 #### 2. 修改 SSH 配置文件 编辑 `/etc/ssh/sshd_config` 文件中的参数来调整访问权限。对于某些情况下的连接失败,可能是因为默认配置不允许特定用户的密码认证。将 `PermitRootLogin prohibit-password` 更改为 `PermitRootLogin yes` 或者允许其他非 root 用户登录,并保存更改后重启 SSH 服务 (`systemctl restart ssh`) 以便应用新的配置选项[^3]。 #### 3. 关闭防火墙干扰 有时本地或远程主机的安全策略可能会阻止正常的网络通信。停止并禁用 Linux 上的 Firewalld 可以排除这种可能性:`systemctl stop firewalld; systemctl disable firewalld`。请注意,在生产环境中应谨慎处理安全措施;此步骤仅用于测试目的。 #### 4. 查看日志记录分析原因 如果上述方法仍未能解决问题,那么查看系统的安全事件日志可以帮助进一步诊断问题所在。使用 `tail -n 50 /var/log/auth.log` (Ubuntu) 或 `tail -n 50 /var/log/secure` (CentOS/RHEL) 获取最近的日志条目,寻找任何有关于拒绝访问的信息,这有助于识别具体是什么因素导致了这个问题的发生。 #### 5. 确认用户名拼写准确性 仔细核对输入的用户名是否准确无误。有报告指出由于打字错误造成的无效用户名 ("dministrator") 导致了密码验证失败的情况发生。 ```bash # 检查 SSH 服务状态 systemctl status sshd # 编辑 SSH 配置文件 vi /etc/ssh/sshd_config # 重启 SSH 服务使新配置生效 systemctl restart ssh ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值