求助,多个IO口共用一个子函数

大头BB 2013-04-13 11:38:29
我现在在做一个东西,很多IO口都需调用一个类似的子函数,但是如果都用不同的子函数代码又太长了,有什么好的方法解决这个问题,谢谢
...全文
314 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xujianxiang 2013-04-27
  • 打赏
  • 举报
回复
#define onp1(i) P1=P1|(1<<i) #define oFFp1(i) P1=P1&~(1<<i)
大头BB 2013-04-20
  • 打赏
  • 举报
回复
引用 9 楼 lbing7 的回复:
带参数宏???
之前在网上看到过,很复杂,看了很久看不懂
大头BB 2013-04-20
  • 打赏
  • 举报
回复
引用 6 楼 wangfan027 的回复:
C/C++ code?12345678910111213141516171819typedef enum{ p00=0, p01=1, p02=2, ....}IO_Tvoid fun(IO_T io){ switch(io) { case p00: ...... break; case p……
如果是这样做的话,因为其实case后面的内容都是几乎一样的,只是对不同的IO操作而已,并没有省代码
lbing7 2013-04-19
  • 打赏
  • 举报
回复
带参数宏???
Fighting959800 2013-04-19
  • 打赏
  • 举报
回复
尝试别的方法试试吧,这个挺难想出来啊!
  • 打赏
  • 举报
回复
你在函数入口 传个参数 应该可以吧、每次用参数来选择就行啊
dceacho 2013-04-14
  • 打赏
  • 举报
回复
如果是51的话想优化点SWITCH代码,可以尝试直接使用其IO地址,因为IO地址偏移是一样的,不过我也不知道这样会不会有问题

//假设是对IO口取反
void fun(uint8_t ioaddr)
{
   uint8_t *ptr=(uint8_t*)ioaddr;
   *ptr=~*ptr;
}
dceacho 2013-04-14
  • 打赏
  • 举报
回复

typedef enum
{
    p00=0,
    p01=1,
    p02=2,
    ....
}IO_T
void fun(IO_T io)
{
   switch(io)
   {
       case p00:
        ......
        break;
      case p01:
       ........
            break;
         .......
    }

大头BB 2013-04-13
  • 打赏
  • 举报
回复
引用 1 楼 wangfan027 的回复:
有什么问题么? 调用同一个就调用同一个,又不是不能 如果是可能并行执行的话试试reentry
IO不能作为函数参数,弄不了
  • 打赏
  • 举报
回复
有什么问题么? 调用同一个就调用同一个,又不是不能 如果是可能并行执行的话试试reentry
  • 打赏
  • 举报
回复
有什么问题么? 调用同一个就调用同一个,又不是不能 如果是可能并行执行的话试试reentry
dceacho 2013-04-13
  • 打赏
  • 举报
回复
有什么问题么? 调用同一个就调用同一个,又不是不能 如果是可能并行执行的话试试reentry

27,508

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧