找回密码
 立即注册
查看: 582|回复: 4

C251中函数指针数组的用法

[复制链接]
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    8

    主题

    14

    回帖

    156

    积分

    注册会员

    积分
    156
    发表于 2023-3-4 22:27:04 | 显示全部楼层 |阅读模式
    最近在用STC32G12K128这颗芯片,移植之前的程序发现函数指针数组中调用的函数没有被识别。多次尝试后发现在C251中函数指针数据不能在定义时初始化,需要定义后,逐个赋值。这一点和C51有点不同。

    在定义时赋值无效:
    1. typedef int(* Fuc)(int, int);
    2. int add(int a, int b);
    3. int sub(int a, int b);
    4. int mul(int a, int b);
    5. int divi(int a, int b);
    6. void main()
    7. {
    8.         Fuc arr[4] = {
    9.         add,
    10.         sub,
    11.         mul,
    12.         divi
    13.         };
    复制代码
    编译报错误:

    *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
        NAME:    add/Demo
    *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
        NAME:    divi/Demo
    *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
        NAME:    sub/Demo
    *** WARNING L57: UNCALLED FUNCTION, IGNORED FOR OVERLAY PROCESS
        NAME:    mul/Demo


    定义后逐个赋值:
    1. typedef int(* Fuc)(int, int);
    2. int add(int a, int b);
    3. int sub(int a, int b);
    4. int mul(int a, int b);
    5. int divi(int a, int b);
    6. void main()
    7. {
    8.         Fuc arr[4];
    9.         arr[0] = add;
    10.         arr[1] = sub;
    11.         arr[2] = mul;
    12.         arr[3] = divi;
    复制代码
    编译可以通过。
    回复 送花

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 157 天

    [LV.7]常住居民III

    17

    主题

    370

    回帖

    1301

    积分

    荣誉版主

    积分
    1301
    发表于 2023-3-5 09:05:16 | 显示全部楼层
    个人感觉 用逐个赋值的写法更直观。
  • TA的每日心情
    开心
    3 天前
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    8

    主题

    14

    回帖

    156

    积分

    注册会员

    积分
    156
     楼主| 发表于 2023-3-5 20:12:18 | 显示全部楼层
    用法引人而异。之前在定义时赋值,是考虑到可以把函数指针放在flash里,节省ram空间。单片机有时太缺ram了。
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 51 天

    [LV.5]常住居民I

    2

    主题

    148

    回帖

    191

    积分

    注册会员

    积分
    191
    发表于 2024-3-7 23:28:54 | 显示全部楼层
    确实有这个问题这两天写程序也是这样的,之前C51不报错,移植到C251就出现了
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    43

    主题

    367

    回帖

    1043

    积分

    金牌会员

    静坐常思己过,闲谈莫论人非

    积分
    1043
    发表于 2024-3-8 18:10:50 | 显示全部楼层
    WARNING又不是ERROR,编译通过没啥问题吧
    处事要代人所想,读书需切己用功
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-2 15:57 , Processed in 0.270386 second(s), 44 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表