搜索
bottom↓
回复: 62

KEIL编译效率还是很低,常用的接口还是汇编写效率高

[复制链接]

出10入120汤圆

发表于 2020-7-15 11:22:42 | 显示全部楼层 |阅读模式
参数  R6/R7 ->  R4/R5 来回折腾,效率低很多很多,直接送数多省事啊


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入12汤圆

发表于 2020-7-15 11:36:11 | 显示全部楼层
直接0101010效率更高

出0入93汤圆

发表于 2020-7-15 11:40:30 | 显示全部楼层
就是,不但来回折腾,而且还搞得跟寄存器组0相关,都埋雷了。不折腾这一下啥问题都没

出10入120汤圆

 楼主| 发表于 2020-7-15 11:43:17 | 显示全部楼层
OOXX110 发表于 2020-7-15 11:36
直接0101010效率更高


              SETB    sbxLcdRS
              MOV     P0,R6
              CLR     sbnLcdWR
              SETB    sbnLcdWR
              MOV     P0,R7
              CLR     sbnLcdWR
              SETB    sbnLcdWR
              RET     

这样8条指令完成,原来11条,液晶刷新提高了30%的效率,效率在关键的时候还是需要考虑的

出0入4汤圆

发表于 2020-7-15 11:43:48 | 显示全部楼层
要那么高效率干嘛,性能不够换芯片好了,大把高性能的芯片可选。

出0入79汤圆

发表于 2020-7-15 11:43:58 来自手机 | 显示全部楼层
这种技巧没有太大用处。以后的维护或者交接搞死人。

出0入4汤圆

发表于 2020-7-15 11:45:36 | 显示全部楼层
OOXX110 发表于 2020-7-15 11:36
直接0101010效率更高

0101也未必能写出效率更好的,大牛除外。用C语言 99%的人写出来的程序都不会太差。但是用0101写  99%的人都写不出好的程序来。

出10入120汤圆

 楼主| 发表于 2020-7-15 11:46:35 | 显示全部楼层
wajlh 发表于 2020-7-15 11:45
0101也未必能写出效率更好的,大牛除外。用C语言 99%的人写出来的程序都不会太差。但是用0101写  99%的人 ...

这句话同意,用汇编写出狗屎样的程序人多着呢

出0入34汤圆

发表于 2020-7-15 11:56:05 | 显示全部楼层
关闭编译器的优化后效率也蛮高的。

出0入93汤圆

发表于 2020-7-15 11:58:10 | 显示全部楼层
makesoft 发表于 2020-7-15 11:43
SETB    sbxLcdRS
              MOV     P0,R6
              CLR     sbnLcdWR

    SETB    sbxLcdRS
    MOV     P0,R6
    ACALL   $ + 4
    MOV     P0,R7
    CLR     sbnLcdWR
    SETB    sbnLcdWR
    RET
再干掉一条指令,Keil编译的占用21Byte,你手写后占用15Byte,减少了28.6%的Flash占用。我再减少2字节,比你的代码又优化了13.3%的空间占用。代码在关键的时候还是需要考虑的,然而并没有啥用。

出0入25汤圆

发表于 2020-7-15 12:45:48 来自手机 | 显示全部楼层
gcc的嵌汇编语法比较强,可以设定用了哪些寄存器,防止编译器优化的时候其他代码误用寄存器,把汇编封装好之后基本不会有隐患。keil不知道有没有类似的语法

出0入442汤圆

发表于 2020-7-15 13:00:42 来自手机 | 显示全部楼层
cy18 发表于 2020-7-15 12:45
gcc的嵌汇编语法比较强,可以设定用了哪些寄存器,防止编译器优化的时候其他代码误用寄存器,把汇编封装好 ...

嵌入汇编太难了,我到现在也学不会。几个参数映射理解不了。所以我到现在也只嵌几条固定指令。

出10入120汤圆

 楼主| 发表于 2020-7-15 13:02:59 来自手机 | 显示全部楼层
wye11083 发表于 2020-7-15 13:00
嵌入汇编太难了,我到现在也学不会。几个参数映射理解不了。所以我到现在也只嵌几条固定指令。 ...

汇编文件和C文件在一个项目里混合编程还是挺方便的,我也不喜欢函数内嵌入汇编。

出16170入6148汤圆

发表于 2020-7-15 13:35:42 来自手机 | 显示全部楼层
打赏!

庆祝论坛“打赏”功能实施, 现在开始发技术主题,可以获得打赏
https://www.amobbs.com/thread-5735948-1-1.html

出0入442汤圆

发表于 2020-7-15 13:44:06 | 显示全部楼层
makesoft 发表于 2020-7-15 13:02
汇编文件和C文件在一个项目里混合编程还是挺方便的,我也不喜欢函数内嵌入汇编。 ...

这个倒是真的,有些代码没法用C写(涉及到最底层寄存器调度之类的代码)。C适合用来做算法、逻辑等等,汇编适合实现底层平台架构。比如多线程切换,用C是没法写的,但是用汇编就很容易把寄存器搬运到位。

出0入442汤圆

发表于 2020-7-15 13:44:42 | 显示全部楼层
takashiki 发表于 2020-7-15 11:58
再干掉一条指令,Keil编译的占用21Byte,你手写后占用15Byte,减少了28.6%的Flash占用。我再减少2字节, ...

然后你会发现你花了几天时间优化的代码没法维护了

出200入2554汤圆

发表于 2020-7-15 13:48:25 | 显示全部楼层
Arduino 和 C++ 捂脸跑开......

出0入0汤圆

发表于 2020-7-15 18:33:34 | 显示全部楼层
毕业后就一直改用IAR了~

出30入42汤圆

发表于 2020-7-15 22:00:03 来自手机 | 显示全部楼层
我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候出钱来找我

出0入0汤圆

发表于 2020-7-16 09:07:28 | 显示全部楼层
PPS 发表于 2020-7-15 22:00
我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候 ...

你这是拥码自重啊

出0入34汤圆

发表于 2020-7-16 09:13:33 | 显示全部楼层
PPS 发表于 2020-7-15 22:00
我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候 ...

想多了,找个人,用C 再写一次,就没你什么事了

出0入0汤圆

发表于 2020-7-16 11:00:26 | 显示全部楼层
makesoft 发表于 2020-7-15 11:43
SETB    sbxLcdRS
              MOV     P0,R6
              CLR     sbnLcdWR

一直好奇,嵌入汇编的时候 会不会破坏C原本的寄存器值啊, 呃,意思就是调用汇编的时候怎么知道当时那些寄存器再被使用呢,编译器会自己保护现场么?

出10入120汤圆

 楼主| 发表于 2020-7-16 11:02:38 | 显示全部楼层
浮华一生 发表于 2020-7-16 11:00
一直好奇,嵌入汇编的时候 会不会破坏C原本的寄存器值啊, 呃,意思就是调用汇编的时候怎么知道当时那些 ...

保护现场在汇编里面自然要你自己写了,用到的资源肯定需要入栈和出栈,带入和带出的参数在编译器里面有详细的规定。

出0入79汤圆

发表于 2020-7-16 11:51:55 来自手机 | 显示全部楼层
本帖最后由 motor_control 于 2020-7-16 11:54 编辑
epwwm 发表于 2020-7-16 09:13
想多了,找个人,用C 再写一次,就没你什么事了


如果是比较牛逼的算法,找人用c也不见得搞得定。

现在这个时代真的就不用再搞什么汇编了,除非你是程序稳定不怎么修改,出货量极大。

出0入0汤圆

发表于 2020-11-24 17:55:23 | 显示全部楼层
motor_control 发表于 2020-7-16 11:51
如果是比较牛逼的算法,找人用c也不见得搞得定。

现在这个时代真的就不用再搞什么汇编了,除非你是程序 ...

想多,软件认证的部分你不用汇编根本没法写。

出0入79汤圆

发表于 2020-11-24 17:59:28 | 显示全部楼层
lyl1070 发表于 2020-11-24 17:55
想多,软件认证的部分你不用汇编根本没法写。

现在用汇编写绝对不是主流,你说的这种情况肯定有,但绝非趋势。

出0入0汤圆

发表于 2020-11-25 17:14:28 | 显示全部楼层
你费劲心力提高的那30%性能,还不如直接找个主频翻倍的mcu来的容易。
但是你耗费的时间成本,很难抹平了。
所以现在除非是搞系统移植,关键算法,不要想着汇编了。
要说还是ti的dsp搞得不错,封装了一些底层指令,也算汇编,但是使用起来容易多了。

出0入0汤圆

发表于 2020-11-26 10:01:06 | 显示全部楼层
还在研究这些奇淫技巧,没什么用

出0入79汤圆

发表于 2020-11-26 10:26:42 来自手机 | 显示全部楼层
本帖最后由 motor_control 于 2020-11-26 10:27 编辑
trigrass12 发表于 2020-11-26 10:01
还在研究这些奇淫技巧,没什么用


汇编还是很重要的,只是以C为主了。

出5入0汤圆

发表于 2020-11-26 11:40:40 来自手机 | 显示全部楼层
PPS 发表于 2020-7-15 22:00
我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候 ...

不要了从新写

出0入79汤圆

发表于 2020-11-26 14:34:24 | 显示全部楼层
PPS 发表于 2020-7-15 22:00
我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候 ...

是个好方法!

出0入0汤圆

发表于 2020-11-26 14:49:50 | 显示全部楼层

我不觉得这我哪里刷新慢了, 我这是16位刷屏, 楼主好像是8位的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2020-11-26 14:51:21 | 显示全部楼层
而且楼主写成了函数, 会发生跳转, 为了效率应该直接循环, 而且一次循环就写8个数据减少跳转次数
void Lcd_WriteBmp16(void* bmp16, s32 size)
{
    u16 const* bmp = bmp16;
    LCD_SEND_CMD(LcdCmd.WriteGRAM);  // Prepare to write GRAM
    LCD_CS_OUT(0);
    LCD_RS_OUT(1);
    //
    size >>= 1;
    switch(size&7)
    {
        default:
            while((size-=8)>=0)
            {
                LCD_DAT_OUT(*bmp++); LCD_WR_OUT(0);  LCD_WR_OUT(1);
        case 7: LCD_DAT_OUT(*bmp++); LCD_WR_OUT(0);  LCD_WR_OUT(1);
        case 6: LCD_DAT_OUT(*bmp++); LCD_WR_OUT(0);  LCD_WR_OUT(1);
        case 5: LCD_DAT_OUT(*bmp++); LCD_WR_OUT(0);  LCD_WR_OUT(1);
        case 4: LCD_DAT_OUT(*bmp++); LCD_WR_OUT(0);  LCD_WR_OUT(1);
        case 3: LCD_DAT_OUT(*bmp++); LCD_WR_OUT(0);  LCD_WR_OUT(1);
        case 2: LCD_DAT_OUT(*bmp++); LCD_WR_OUT(0);  LCD_WR_OUT(1);
        case 1: LCD_DAT_OUT(*bmp++); LCD_WR_OUT(0);  LCD_WR_OUT(1);
            }
    }
    LCD_CS_OUT(1);
}

出0入0汤圆

发表于 2020-11-26 15:00:03 | 显示全部楼层
驱动spi液晶屏,用汇编刷新速度就比c快很多

出0入20汤圆

发表于 2021-1-20 10:35:22 | 显示全部楼层
30年的编程经验:维护、更新远大于程序优化。

出10入0汤圆

发表于 2021-1-20 11:14:27 | 显示全部楼层
汇编最大的问题是一段时间后自己都看不懂了,还怎么维护啊?

出0入84汤圆

发表于 2021-1-20 12:55:55 | 显示全部楼层
管他作甚,1块钱的单片机不行就换两块钱的。
用着舒服效率高就行了。

出0入4汤圆

发表于 2021-1-20 13:11:04 | 显示全部楼层
wajlh 发表于 2020-7-15 11:43
要那么高效率干嘛,性能不够换芯片好了,大把高性能的芯片可选。

你是老板就不会这么认为了~~~5毛的芯片能干的事情,非得上5块的

出0入4汤圆

发表于 2021-1-20 13:12:38 | 显示全部楼层
epwwm 发表于 2020-7-16 09:13
想多了,找个人,用C 再写一次,就没你什么事了

空间就4K,汇编写完4K,你重写吧~~~

出10入120汤圆

 楼主| 发表于 2021-1-20 13:46:12 来自手机 | 显示全部楼层
mon51 发表于 2021-1-20 10:35
30年的编程经验:维护、更新远大于程序优化。

有些道理,几年前的程序看起来都很陌生,怀疑是自己写的吗?
程序升级更改都是愁人的事,上万行的程序有注释也是不敢妄动的。

出10入120汤圆

 楼主| 发表于 2021-1-20 13:47:06 来自手机 | 显示全部楼层
ordman 发表于 2021-1-20 11:14
汇编最大的问题是一段时间后自己都看不懂了,还怎么维护啊?

俺C程序几年后自己都不认识了,还说汇编呢?

出10入120汤圆

 楼主| 发表于 2021-1-20 16:16:12 来自手机 | 显示全部楼层
kap 发表于 2020-11-26 15:00
驱动spi液晶屏,用汇编刷新速度就比c快很多

回帖指标用完了,再回复一个。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2021-1-20 21:43:54 | 显示全部楼层
spi刷屏,区域刷屏,用DMA快很多

出0入0汤圆

发表于 2021-1-20 23:02:44 | 显示全部楼层
做小家电方案都是用义隆,应广这些便宜的单片机,汇编还真的不能放弃。

出0入0汤圆

发表于 2021-1-21 09:12:20 | 显示全部楼层
zhanyanqiang 发表于 2021-1-20 13:12
空间就4K,汇编写完4K,你重写吧~~~

电工就是这样被自己逼死的

出0入1209汤圆

发表于 2021-1-21 15:01:52 | 显示全部楼层
zhanyanqiang 发表于 2021-1-20 13:12
空间就4K,汇编写完4K,你重写吧~~~


就不会换个8K的?这都啥年代了。写单片机的要跟写APP的学习一下,搞聊天APP的动辄几个G,运行卡顿?不好意思请换最新款手机。运行有bug?不好意思3年前的手机型号我们已经不维护了。

出0入4汤圆

发表于 2021-1-21 15:20:02 | 显示全部楼层
kitten 发表于 2021-1-21 15:01
就不会换个8K的?这都啥年代了。写单片机的要跟写APP的学习一下,搞聊天APP的动辄几个G,运行卡顿?不好意 ...


一个月出货50W个的东西,你随便加成本?

出0入4汤圆

发表于 2021-1-21 15:39:02 | 显示全部楼层
yikeai 发表于 2021-1-20 23:02
做小家电方案都是用义隆,应广这些便宜的单片机,汇编还真的不能放弃。

是的,不止家电,还有好多其他行业还在用几毛的芯片

出0入0汤圆

发表于 2021-1-21 16:30:58 | 显示全部楼层
汇编只适合自己玩,公司是极少用到的

出0入1209汤圆

发表于 2021-1-21 17:52:04 | 显示全部楼层
zhanyanqiang 发表于 2021-1-21 15:20
一个月出货50W个的东西,你随便加成本?

省下来的钱跟你有关系么?东西一定是便宜的就是对的?

出0入4汤圆

发表于 2021-1-22 09:58:27 | 显示全部楼层
kitten 发表于 2021-1-21 17:52
省下来的钱跟你有关系么?东西一定是便宜的就是对的?

哎....在公司接手了一个之前人用汇编写的程序,一个月出货50W个,空间就4K,汇编写的,空间已经只剩0.25K,汇编留下的程序也是乱七八糟的,领导希望你不增加成本的前提下增加其他功能,时间又紧,按照理论计算汇编是能写下的,你是打算看完人家的汇编还是按功能自己换成C(C估计是写不下了),还是换芯片?告诉你换芯片这么大的出货量如果没有非常详细的测试大概率是会出问题的。。。。辞职不干?关键所在岗位工资还可以哦,身边真实的,你怎么办?  

出0入1209汤圆

发表于 2021-1-22 10:27:52 | 显示全部楼层
zhanyanqiang 发表于 2021-1-22 09:58
哎....在公司接手了一个之前人用汇编写的程序,一个月出货50W个,空间就4K,汇编写的,空间已经只剩0.25K, ...

看钱那就忍忍呗,能怎么办?不过前人都跑了是由原因的。

出0入8汤圆

发表于 2021-1-22 10:31:30 来自手机 | 显示全部楼层
zhanyanqiang 发表于 2021-1-22 09:58
哎....在公司接手了一个之前人用汇编写的程序,一个月出货50W个,空间就4K,汇编写的,空间已经只剩0.25K, ...

三条路
1. 拿工资,尽量做,不保证能做出来(等人喂饭)
2. 拿提成,使出浑身解术做,一定要做出来(跟着喝汤)
3. 开公司,同第2点,以新功能为卖点切入市场(吃肉)

出0入0汤圆

发表于 2021-1-25 11:36:21 | 显示全部楼层
以上总结精辟

出0入4汤圆

发表于 2021-1-28 01:35:28 | 显示全部楼层
zhanyanqiang 发表于 2021-1-20 13:11
你是老板就不会这么认为了~~~5毛的芯片能干的事情,非得上5块的

话说一个月都出货50K了,赚的钱还差这点单片机的钱? 老板的毛病都是工程师惯出来的。出货50K的行业几毛钱都差的话,那就别干了,挣这辛苦钱有啥意思?芯片价格有点波动生意都要赔钱了。还不如干点别的高利润的事情。

出0入4汤圆

发表于 2021-1-28 09:31:30 | 显示全部楼层
wajlh 发表于 2021-1-28 01:35
话说一个月都出货50K了,赚的钱还差这点单片机的钱? 老板的毛病都是工程师惯出来的。出货50K的行业几毛 ...

话是这个理

出300入477汤圆

发表于 2021-1-28 09:53:16 来自手机 | 显示全部楼层
wajlh 发表于 2021-1-28 01:35
话说一个月都出货50K了,赚的钱还差这点单片机的钱? 老板的毛病都是工程师惯出来的。出货50K的行业几毛 ...

很多量大的低技术东西就这样啊,一个赚5毛,5万个就赚25000,恰好够自己的工资。如果多5毛成本他就不用拿工资了,白干

出0入0汤圆

发表于 2022-8-30 12:01:15 | 显示全部楼层
一个LCD刷屏驱动 优化和不优化能差到好几倍性能
还有就是拿stm32的c语言刷屏代码直接编译到51上面用 简直是一场灾难

出0入0汤圆

发表于 2022-8-31 16:29:32 | 显示全部楼层
zhanyanqiang 发表于 2021-1-22 09:58
哎....在公司接手了一个之前人用汇编写的程序,一个月出货50W个,空间就4K,汇编写的,空间已经只剩0.25K, ...
(引用自51楼)

有0.25k已经不错了,我当时接了一个,只剩下8字节了。

根据我的经验,程序写得越乱,说明优化的空间越大,任务越容易完成。

出0入4汤圆

发表于 2022-8-31 16:33:20 | 显示全部楼层
xmlbb 发表于 2022-8-31 16:29
有0.25k已经不错了,我当时接了一个,只剩下8字节了。

根据我的经验,程序写得越乱,说明优化的空间越大 ...
(引用自59楼)

厉害,我已经跑路~~~不搞了,难住我了

出0入0汤圆

发表于 2022-8-31 16:39:26 | 显示全部楼层
wajlh 发表于 2021-1-28 01:35
话说一个月都出货50K了,赚的钱还差这点单片机的钱? 老板的毛病都是工程师惯出来的。出货50K的行业几毛 ...
(引用自55楼)


你不惯别人惯呀,你如果说这不可能的,换个容量大一点的吧,那么老板就拿一模一样的东西给你,说,你看,别人已经完成了,哈哈,这就是内卷吧。

出0入300汤圆

发表于 2022-8-31 22:38:10 来自手机 | 显示全部楼层
所以自从欧洲订单没了以后好几个月了,我也不把产品冲进国内市场。中国人的聪明劲是用来省钱的,而欧洲人也很算计,但他们的算计是如何把事情做的更好。本来这样的贴子是一个很好的技术帖子 ,但问题很快被升级到了钱上,算吧,直至把自己都算计死。

出0入4汤圆

发表于 2022-9-1 08:53:16 来自手机 | 显示全部楼层
xmlbb 发表于 2022-8-31 16:29
有0.25k已经不错了,我当时接了一个,只剩下8字节了。

根据我的经验,程序写得越乱,说明优化的空间越大 ...

(引用自59楼)

我用c写消费类的程序,经常是剩下几个字节的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 23:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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