当前位置: 首页 > news >正文

单片机【指定数组地址】跳转表写法

一、什么是跳转表

跳转表本质上是一个函数指针数组,存放在 ROM 或 Flash 的固定地址。每个数组元素是一个 4 字节的函数入口地址。通过索引即可快速跳转到对应的函数,而不需要知道函数的具体地址。

示例代码

#include <stdio.h> #include <stdlib.h> #include <string.h> typedef unsigned long long uint64_t; typedef unsigned long uint32_t; typedef unsigned int uint16_t; typedef unsigned char uint8_t; uint8_t a(uint8_t x, uint8_t y) { return x + y; } uint32_tb[1] __attribute__((at(0x20002000))) = {(uint32_t)&a}; int main(void) { int i = (int)((uint8_t(*)(uint8_t, uint8_t))(*(uint32_t*)&b[0]))(1,2); printf("i=%d", i); return 0; }

1)ARM 编译器(ARMCC)最常用

// 我要把数组 b 放在内存地址 0x20002000 这个位置! uint32_t b[1] __attribute__((at(0x20002000))) = {0};

2)GCC 编译器(MounRiver、嵌入式 Linux)

uint32_t b[1] __attribute__((section(".my_section"))) = {0};

然后在链接脚本 .ld里指定:

.my_section 0x20002000 : { *(.my_section) }

3)Keil + C51(老式 8 位机)

uint32_t b[1] _at_ 0x3000;

二、代码 → 直接改成 “指定位置”

exturn void a(void); // 数组 b 强制放在 0x20002000 地址 uint32_t b[1] __attribute__((at(0x20002000))) = {(uint32_t)&a}; void a(void) { } // 使用 void test(void) { b[0] = (uint32_t)&a; ((void(*)(void))b[0])(); // 调用函数 }
http://www.jsqmd.com/news/654064/

相关文章:

  • 4.15学习日志
  • 生成式AI应用数据回流机制:从原始日志到高质量微调数据的7步工业化流水线(附GDPR/《生成式AI服务管理暂行办法》双合规checklist)
  • 2026智能快速bod分析仪厂家推荐排行榜江苏盛奥华环保科技领衔(产能+专利+服务三重认证) - 爱采购寻源宝典
  • 多进程multiprocessing加速程序的运行
  • 2026艺术装饰混凝土厂家推荐排行榜从产能到质量,廊坊美鑫防火材料有限公司领跑行业 - 爱采购寻源宝典
  • 2026智能联网检测仪厂家推荐 江苏盛奥华环保科技领衔(产能/专利/质量三重认证) - 爱采购寻源宝典
  • 2026创新节能型自动化控制系统厂家推荐 珀克利电气科技产能与专利双领先 - 爱采购寻源宝典
  • SenseVoiceSmall实战分享:多语言会议录音的情感与事件分析
  • 5分钟快速上手OBS智能背景移除插件:免费实现专业虚拟背景的完整指南
  • Nanbeige4.1-3B部署案例:国产A10/A800显卡适配经验——CUDA 11.8+torch2.0实测
  • STM32 实现差分编码器高精度数据采集与倍频技术详解
  • Qwen3-14B镜像空间优化:精简日志+清理缓存+压缩模型权重技巧
  • 2026年靠谱的南京广告摄影/南京商业摄影/南京工业摄影/南京企业宣传摄影靠谱公司推荐 - 品牌宣传支持者
  • Figma设计数据双向转换:如何实现设计文件与JSON格式的高效互转
  • GLM-4.7-Flash完整使用指南:部署、调用、调优一站式解决,小白友好
  • 2026便携式检测仪厂家推荐排行榜江苏盛奥华环保科技产能与专利双领先 - 爱采购寻源宝典
  • HY-Motion-1.0输入规范详解:Prompt编写避坑指南
  • 2026轻质耐用防爆板厂家推荐 廊坊荣特建材集团领衔(产能/专利/质量三重认证) - 爱采购寻源宝典
  • 千问3.5-2B多模型对比展示:轻量级2B参数模型的效率与精度平衡
  • Dify v1.13.x 版本更新速览:从人机协作到架构升级
  • JavaScript for循环怎么用?
  • IO/XFS 故障现场排查手册
  • 2026高强耐久混凝土厂家推荐 廊坊美鑫产能领先专利护航环保认证 - 爱采购寻源宝典
  • 使用强力的安装命令
  • 备忘录笔记
  • 零基础玩转coze-loop:AI帮你优化代码的5个实用技巧
  • 2026年知名的钢包全程加揭盖/钢包加揭盖设备/铁包加揭盖设备厂家推荐 - 品牌宣传支持者
  • Day02 优化版|阿里云ACP大模型解决方案专家
  • Rust错误处理Option与Result模式
  • 信息学奥赛一本通C语言解法(题号1004)