硬汉嵌入式论坛

 找回密码
 立即注册
楼主: WALL_E
收起左侧

[Source Insight] 将Source Insight打造成好用的编辑器(98楼下载)

  [复制链接]

9

主题

39

回帖

66

积分

初级会员

只要努力,没有什么办不到

积分
66
发表于 2020-3-17 17:37:15 | 显示全部楼层
我又来支持下,miniMacro确实好用,si3用不了,换si4
回复

使用道具 举报

17

主题

177

回帖

233

积分

高级会员

积分
233
QQ
发表于 2020-3-27 20:03:01 | 显示全部楼层
感谢更新,自己按需求提取了几个函数,用着很舒服!
回复

使用道具 举报

17

主题

177

回帖

233

积分

高级会员

积分
233
QQ
发表于 2020-4-2 22:45:36 | 显示全部楼层
WALL_E 发表于 2020-3-15 19:08
  • miniMacro修复"$#$"的问题,即全部替换为"&#&"。
  • miniMacro修复超长函数(大约200行)添加头注释导 ...

  • 函数添加头注释还是有报错,把那个函数改成下边的就可以了。

    1. function _getFuncPara(hSyml, hBuf)
    2. {
    3.     iCnt = hSyml.lnName
    4.     szLine = GetBufLine(hBuf, iCnt)
    5.     szLine = strmid(szLine, strlen(hSyml.Symbol) + hSyml.ichName, GetBufLineLength(hBuf, iCnt))
    6.     szParaStr = cat(szLine, " ")
    7.     iCnt++
    8.     szLine = GetBufLine(hBuf, iCnt)
    9.     szParaStr = cat(szParaStr, szLine)
    10.     szParaStr = _getStrNoBlockAnnaotate(szParaStr)
    11.     szParaStr = _getParaStrFromStr(szParaStr, hSyml.Type)

    12.     /* 从参数字符串中提取出参数名 */
    13.     szPara = ""
    14.     szPara.iParaNum = 0
    15.     szPara.szParaStr = ""
    16.     iLen = strlen(szParaStr)
    17.     iCnt = 0
    18.     cchStart = 0
    19.     cchEnd = 0
    20.     while (iCnt < iLen)
    21.     {
    22.         if (szParaStr[iCnt] == ",")
    23.         {
    24.             cchEnd = iCnt
    25.             szCut = strmid(szParaStr, cchStart, cchEnd)     /*!< 截取一个参数字符串*/
    26.             szPara.szParaStr = cat(szPara.szParaStr, _getParaNameFromStr(szCut))
    27.             szPara.iParaNum = szPara.iParaNum + 1
    28.             cchStart = iCnt + 1
    29.             cchEnd = iCnt + 1
    30.         }
    31.         iCnt++
    32.     }
    33.     return szPara
    34. }
    复制代码


    回复

    使用道具 举报

    9

    主题

    81

    回帖

    113

    积分

    初级会员

    积分
    113
     楼主| 发表于 2020-4-3 09:49:28 | 显示全部楼层
    本帖最后由 WALL_E 于 2020-4-3 10:37 编辑
    yumeng 发表于 2020-4-2 22:45
    函数添加头注释还是有报错,把那个函数改成下边的就可以了。

    感谢对miniMacro的支持。你这个函数我测试发现,注释如下这个函数会有问题。
    1. void test(int m, // int z,
    复制代码

    代码分析:
    1.     iCnt = hSyml.lnName
    2.     szLine = GetBufLine(hBuf, iCnt)
    3.     szLine = strmid(szLine, strlen(hSyml.Symbol) + hSyml.ichName, GetBufLineLength(hBuf, iCnt))
    4.     szParaStr = cat(szLine, " ")
    5.     iCnt++
    6.     szLine = GetBufLine(hBuf, iCnt)
    7.     szParaStr = cat(szParaStr, szLine)
    8.     szParaStr = _getStrNoBlockAnnaotate(szParaStr)
    复制代码
    第1~4行是将函数名所在行中函数名后面的代码读到szLine变量中,szParaStr = cat(szLine, " ")是在szLine后面增加一个空格,防止下一行参数是顶格写的。第5~7行是读取下一行追加到szLine后面。
    第8行是去除字符串中的块注释部分。
    这样对多行参数就会检测不到,且没有消除行注释。

    _getParaStrFromStr(szParaStr, hSyml.Type)函数检测“{”来判断函数体开始位置的,是我注释没写清楚抱歉。
    1.         iCnt = hSyml.lnName
    2.         iMax = hSyml.lnName + 20

    3.         szLine = GetBufLine(hBuf, iCnt)
    4.         szLine = strmid(szLine, strlen(hSyml.Symbol) + hSyml.ichName, GetBufLineLength(hBuf, iCnt))
    5.         szLine = _getStrNoLineAnnaotate(szLine)
    6.         szParaStr = cat(szLine, " ")
    7.         iCnt++
    8.         while (iCnt <= iMax)
    9.         {
    10.                 szLine = GetBufLine(hBuf, iCnt)
    11.                 szLine = _getStrNoLineAnnaotate(szLine)
    12.                 szLine = cat(szLine, " ")
    13.                 szParaStr = cat(szParaStr, szLine)
    14.                 iCnt++
    15.         }
    16.         szParaStr = _getStrNoBlockAnnaotate(szParaStr)
    17.         szParaStr = _getParaStrFromStr(szParaStr, hSyml.Type)
    复制代码
    这是我写的处理参数代码。
    第1~2行是定义要处理的行数。之前版本iMax是定义到函数结尾,这样函数很长时,缓存就会溢出导致出错。现在限制到20行其实也是没想到好的处理方法。C89 函数参数最大个数31个,C99 函数参数最大个数127个。20行我觉得也够用了。好的方法是一行行检测参数结尾,很复杂,暂时不去考虑了。
    第3~8行如上描述,只是增加了每处理一行都要消除一下行注释。
    循环里就是将20行每一行处理完行注释,拼接成一个字符串。
    最后统一处理块注释。




    回复

    使用道具 举报

    9

    主题

    81

    回帖

    113

    积分

    初级会员

    积分
    113
     楼主| 发表于 2020-4-3 10:48:23 | 显示全部楼层
    WALL_E 发表于 2020-4-3 09:49
    感谢对miniMacro的支持。你这个函数我测试发现,注释如下这个函数会有问题。
    代码分析:
    第1 ...

    第一段代码是: Test.png
    (编辑了几次,一发帖就显示不全,不知道怎么回事。)
    回复

    使用道具 举报

    17

    主题

    177

    回帖

    233

    积分

    高级会员

    积分
    233
    QQ
    发表于 2020-4-4 17:40:58 | 显示全部楼层
    本帖最后由 yumeng 于 2020-4-4 18:41 编辑
    WALL_E 发表于 2020-4-3 10:48
    第一段代码是:
    (编辑了几次,一发帖就显示不全,不知道怎么回事。)

    感谢回复!

    我看了一下Quicker.em 中macro GetFunctionDef(hbuf,symbol)的实现,改成下边的就可以了,用到函数
    SkipCommentFromString
    TrimString
    strstr
    从Quicker.em拿就可以了,你试下。没研究过gif,要不可以给你上个动图。
    1. function _getFuncPara(hSyml, hBuf)
    2. {
    3.     iCnt = hSyml.lnName
    4.     iMax = hSyml.lnLim
    5.     fIsEnd = 1
    6.     while (iCnt <= iMax)
    7.     {
    8.         szLine = GetBufLine(hBuf, iCnt)
    9.         //去掉被注释掉的内容
    10.         RetVal = SkipCommentFromString(szLine,fIsEnd)
    11.         szLine = RetVal.szContent
    12.         szLine = TrimString(szLine)
    13.         fIsEnd = RetVal.fIsEnd
    14.         //如果是{表示函数参数头结束了
    15.         ret = strstr(szLine,"{")
    16.         if(ret != 0xffffffff)
    17.         {
    18.             szLine = strmid(szLine,0,ret)
    19.             szParaStr = cat(szParaStr,szLine)
    20.             break
    21.         }
    22.         szParaStr = cat(szParaStr,szLine)
    23.         iCnt++
    24.     }

    25.     /* 从参数字符串中提取出参数名 */
    26.     szPara = ""
    27.     szPara.iParaNum = 0
    28.     szPara.szParaStr = ""
    29.     iLen = strlen(szParaStr)
    30.     iCnt = 0
    31.     cchStart = 0
    32.     cchEnd = 0
    33.     while (iCnt < iLen)
    34.     {
    35.         if (szParaStr[iCnt] == ",")
    36.         {
    37.             cchEnd = iCnt
    38.             szCut = strmid(szParaStr, cchStart, cchEnd)     /*!< 截取一个参数字符串*/
    39.             szPara.szParaStr = cat(szPara.szParaStr, _getParaNameFromStr(szCut))
    40.             szPara.iParaNum = szPara.iParaNum + 1
    41.             cchStart = iCnt + 1
    42.             cchEnd = iCnt + 1
    43.         }
    44.         iCnt++
    45.     }
    46.     return szPara
    47. }
    复制代码
    回复

    使用道具 举报

    17

    主题

    177

    回帖

    233

    积分

    高级会员

    积分
    233
    QQ
    发表于 2020-4-4 21:27:19 | 显示全部楼层
    yumeng 发表于 2020-4-4 17:40
    感谢回复!

    我看了一下Quicker.em 中macro GetFunctionDef(hbuf,symbol)的实现,改成下边的就可以了, ...

    这个函数还有个问题,就是最后一个参数会漏掉,需要加上下图选中部分的内容就可以了。
    20200404212430.png
    上传个效果图(我去掉了函数返回值类型显示):
    func_header.gif 这个函数
    回复

    使用道具 举报

    9

    主题

    81

    回帖

    113

    积分

    初级会员

    积分
    113
     楼主| 发表于 2020-4-5 20:06:15 | 显示全部楼层
    yumeng 发表于 2020-4-4 21:27
    这个函数还有个问题,就是最后一个参数会漏掉,需要加上下图选中部分的内容就可以了。

    上传个效果图( ...

    非常感谢,测试没问题!一行一行处理,不会受函数体大小影响。
    回复

    使用道具 举报

    44

    主题

    564

    回帖

    701

    积分

    金牌会员

    积分
    701
    发表于 2020-4-5 20:52:00 | 显示全部楼层
    这个很强啊,高级技巧
    回复

    使用道具 举报

    5

    主题

    95

    回帖

    110

    积分

    初级会员

    积分
    110
    发表于 2020-4-11 11:42:20 | 显示全部楼层
    yumeng 发表于 2020-4-4 17:40
    感谢回复!

    我看了一下Quicker.em 中macro GetFunctionDef(hbuf,symbol)的实现,改成下边的就可以了, ...

    函数内只有一个return 就无法添加。不知道是一个bug不
    回复

    使用道具 举报

    17

    主题

    177

    回帖

    233

    积分

    高级会员

    积分
    233
    QQ
    发表于 2020-4-14 23:05:29 | 显示全部楼层
    xiaomeng 发表于 2020-4-11 11:42
    函数内只有一个return 就无法添加。不知道是一个bug不

    测试可以添加的
    回复

    使用道具 举报

    74

    主题

    1203

    回帖

    1425

    积分

    至尊会员

    积分
    1425
    发表于 2020-4-15 09:25:47
    就是不用这个软件,我用vscode

    44

    主题

    564

    回帖

    701

    积分

    金牌会员

    积分
    701
    发表于 2020-8-23 21:05:26 | 显示全部楼层
    为什么我的在base工程导入后,只有几个快捷键有效果如ATL+1,ATL+2,ATL+3,ALT列选择也可以,但是所有的命令行都没有反应,是哪里姿势不对吗?
    回复

    使用道具 举报

    1

    主题

    3

    回帖

    6

    积分

    新手上路

    积分
    6
    发表于 2020-9-15 10:15:58 | 显示全部楼层
    感谢楼主分享啊,真的很有帮助
    回复

    使用道具 举报

    1

    主题

    3

    回帖

    6

    积分

    新手上路

    积分
    6
    发表于 2020-9-15 11:30:32 | 显示全部楼层
    本帖最后由 hzm476172557 于 2020-9-15 11:49 编辑

    楼主能否分享最后修改的版本呢?我也遇到了一个问题,就是按你们44楼讨论的,从qucick.em提取过来之后,所有的参数都不解析了
    回复

    使用道具 举报

    1

    主题

    3

    回帖

    6

    积分

    新手上路

    积分
    6
    发表于 2020-9-15 11:55:41 | 显示全部楼层
    yumeng 发表于 2020-4-14 23:05
    测试可以添加的

    你好,我按你们讨论的修改_getFuncPara函数,并从quicker.em里面复制了所需要用到的函数定义,但是最后的效果却无法提取参数出来,请问能发一下最后的版本给我参考学习一下吗?
    回复

    使用道具 举报

    4

    主题

    144

    回帖

    156

    积分

    初级会员

    积分
    156
    发表于 2020-9-23 09:32:03 | 显示全部楼层
    请问下楼主,函数头注释几个$#$,怎么切换的呢,当前默认选择中的是第一个,按上下键不会选中下一行的一个$#$
    回复

    使用道具 举报

    17

    主题

    177

    回帖

    233

    积分

    高级会员

    积分
    233
    QQ
    发表于 2020-9-25 21:59:21 | 显示全部楼层
    hzm476172557 发表于 2020-9-15 11:55
    你好,我按你们讨论的修改_getFuncPara函数,并从quicker.em里面复制了所需要用到的函数定义,但是最后的 ...

    改后自用的,可供参考:https://github.com/spfanlost/myMacro
    回复

    使用道具 举报

    9

    主题

    81

    回帖

    113

    积分

    初级会员

    积分
    113
     楼主| 发表于 2020-11-21 22:43:44 | 显示全部楼层
    hzm476172557 发表于 2020-9-15 11:30
    楼主能否分享最后修改的版本呢?我也遇到了一个问题,就是按你们44楼讨论的,从qucick.em提取过来之后,所 ...

    最新版本更新,欢迎测试bug,见1楼文件。
    回复

    使用道具 举报

    9

    主题

    81

    回帖

    113

    积分

    初级会员

    积分
    113
     楼主| 发表于 2020-11-21 22:48:21 | 显示全部楼层
    浴火重生 发表于 2020-9-23 09:32
    请问下楼主,函数头注释几个$#$,怎么切换的呢,当前默认选择中的是第一个,按上下键不会选中下一行的一个$ ...

    将miniMacro宏设置为快捷键,我设置的是(CTRL+ENTER)。当前如果选中&#&时,按(CTRL+ENTER)会查找下一个&#&并选中。当前如果没有选中内容,按快捷键,程序首先判断光标前是否有合法命令,没有的话会查找下一个&#&并选中。
    回复

    使用道具 举报

    1

    主题

    13

    回帖

    16

    积分

    新手上路

    积分
    16
    发表于 2020-11-30 15:08:10 | 显示全部楼层
    楼主有没有详细的教程,我SI4添加了之后也是报错。
    回复

    使用道具 举报

    9

    主题

    81

    回帖

    113

    积分

    初级会员

    积分
    113
     楼主| 发表于 2020-11-30 15:58:27 | 显示全部楼层
    Mrjiang1988 发表于 2020-11-30 15:08
    楼主有没有详细的教程,我SI4添加了之后也是报错。

    方便把错误截图发一下吗?
    回复

    使用道具 举报

    1

    主题

    13

    回帖

    16

    积分

    新手上路

    积分
    16
    发表于 2020-12-1 08:40:32 | 显示全部楼层
    WALL_E 发表于 2020-11-30 15:58
    方便把错误截图发一下吗?

    添加您的插件和您发的quicker插件就是这样,后来网上下载一个quicker就正常了。我想试一下您这个插件,一直不成功,SI4版本。
    回复

    使用道具 举报

    9

    主题

    81

    回帖

    113

    积分

    初级会员

    积分
    113
     楼主| 发表于 2020-12-1 14:39:11 | 显示全部楼层
    Mrjiang1988 发表于 2020-12-1 08:40
    添加您的插件和您发的quicker插件就是这样,后来网上下载一个quicker就正常了。我想试一下您这个插件,一 ...

    要不你试试第一个帖子我更新的文件,我这边无法复现这个错误。。。我使用的软件版本是4.00.0093 。
    回复

    使用道具 举报

    1

    主题

    13

    回帖

    16

    积分

    新手上路

    积分
    16
    发表于 2020-12-1 19:49:27 | 显示全部楼层
    我也是这个版本
    回复

    使用道具 举报

    2

    主题

    23

    回帖

    29

    积分

    新手上路

    积分
    29
    发表于 2021-1-24 11:49:23 | 显示全部楼层
    WALL_E 发表于 2020-3-15 18:33
    我试了下Si3确实用不了,可能某些函数不支持。
    链接:https://pan.baidu.com/s/1tD7_7tzBNPrUkNxczBhN5w ...

    序列号导入失败,原安装包下的si4.pediy.lic 导入提示不对
    回复

    使用道具 举报

    1

    主题

    8

    回帖

    11

    积分

    新手上路

    积分
    11
    发表于 2021-2-26 10:13:05 | 显示全部楼层
    好帖,学习一个
    回复

    使用道具 举报

    9

    主题

    81

    回帖

    113

    积分

    初级会员

    积分
    113
     楼主| 发表于 2021-5-5 12:29:21 | 显示全部楼层
    1、最近仔细查找了一下导致宏错误的问题,发现文件编码会导致出错,option-》preferences,files页面最下面Default ecoding改成UTF-8 。或者把宏文件中的中文注释删掉。。。。
    2、第二个之前问的SI的输入框输入多个字符软件就崩溃的问题。竟然因为输入法导致的,win10自带输入法必须切换为英文(美式键盘)再输入就不会导致软件崩溃了。。。
    回复

    使用道具 举报

    17

    主题

    177

    回帖

    233

    积分

    高级会员

    积分
    233
    QQ
    发表于 2021-5-5 17:03:48 | 显示全部楼层
    WALL_E 发表于 2021-5-5 12:29
    1、最近仔细查找了一下导致宏错误的问题,发现文件编码会导致出错,option-》preferences,files页面最下面 ...


    研究的够深入的,一般的注释还是英文合适
    回复

    使用道具 举报

    2

    主题

    9

    回帖

    15

    积分

    新手上路

    积分
    15
    发表于 2022-1-27 08:44:17 | 显示全部楼层
    Source Insigh !!!
    回复

    使用道具 举报

    0

    主题

    66

    回帖

    66

    积分

    初级会员

    积分
    66
    发表于 2022-1-27 12:32:18 | 显示全部楼层
    #在这里快速回复# 非常感谢楼主分享,置酷
    回复

    使用道具 举报

    0

    主题

    66

    回帖

    66

    积分

    初级会员

    积分
    66
    发表于 2022-1-27 12:32:43 | 显示全部楼层
    多谢分享,我还在沿用si3的风格
    回复

    使用道具 举报

    0

    主题

    15

    回帖

    15

    积分

    新手上路

    积分
    15
    发表于 2022-3-5 18:11:58 | 显示全部楼层
    image.png
    这错误怎么解决?
    回复

    使用道具 举报

    0

    主题

    15

    回帖

    15

    积分

    新手上路

    积分
    15
    发表于 2022-3-5 18:14:28 | 显示全部楼层
    这个错误怎么解决
    image.png
    回复

    使用道具 举报

    0

    主题

    1

    回帖

    1

    积分

    新手上路

    积分
    1
    发表于 2022-3-17 11:12:47 | 显示全部楼层
    非常不错,感谢分享
    回复

    使用道具 举报

    1

    主题

    62

    回帖

    65

    积分

    初级会员

    积分
    65
    发表于 2022-3-22 22:34:06 | 显示全部楼层
    谢谢分享,学习中
    回复

    使用道具 举报

    18

    主题

    285

    回帖

    339

    积分

    高级会员

    积分
    339
    发表于 2022-3-31 17:11:16 | 显示全部楼层
    楼主,发现4.0的一个bug,测试代码如下,num变量无法识别
    22222.png

    [C] 纯文本查看 复制代码
    void test(void)
    {
        char data[100];
        char num;
    
    #ifdef TEST_MACRO
            for (num = 0; num <= 10; num++) {
    #else
            for (num = 0; num < 1; num++) {
    #endif
                data[num] = num;
           }
    }

    回复

    使用道具 举报

    0

    主题

    22

    回帖

    22

    积分

    新手上路

    积分
    22
    发表于 2022-4-1 00:29:29 | 显示全部楼层
    木兰花 发表于 2022-3-31 17:11
    楼主,发现4.0的一个bug,测试代码如下,num变量无法识别

    这个是没有识别的宏,可以这么解决
    Video_2022-04-01_002416.gif
    回复

    使用道具 举报

    18

    主题

    285

    回帖

    339

    积分

    高级会员

    积分
    339
    发表于 2022-4-1 10:41:42 | 显示全部楼层
    xiao519510963 发表于 2022-4-1 00:29
    这个是没有识别的宏,可以这么解决

    这么操作确实解决了。

    但是为啥这个宏不识别呢?我用了si两你还是第一次遇见这种问题的
    回复

    使用道具 举报

    18

    主题

    285

    回帖

    339

    积分

    高级会员

    积分
    339
    发表于 2022-4-1 10:44:17 | 显示全部楼层
    xiao519510963 发表于 2022-4-1 00:29
    这个是没有识别的宏,可以这么解决

    昨天还测试了一种方法,就是把for后的 { 放到下面,不放到宏中,也是可以的

    所以怀疑是si对{}的解析出了问题,在这种宏下时
    回复

    使用道具 举报

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

    本版积分规则

    QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

    GMT+8, 2024-5-21 14:27 , Processed in 0.308461 second(s), 26 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2023, Tencent Cloud.

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