makesoft 发表于 2020-7-15 11:22:42

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

参数R6/R7 ->R4/R5 来回折腾,效率低很多很多,直接送数多省事啊{:lol:}。


OOXX110 发表于 2020-7-15 11:36:11

直接0101010效率更高{:lol:}

takashiki 发表于 2020-7-15 11:40:30

就是,不但来回折腾,而且还搞得跟寄存器组0相关,都埋雷了。不折腾这一下啥问题都没

makesoft 发表于 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%的效率,效率在关键的时候还是需要考虑的{:lol:}

wajlh 发表于 2020-7-15 11:43:48

要那么高效率干嘛,性能不够换芯片好了,大把高性能的芯片可选。

motor_control 发表于 2020-7-15 11:43:58

这种技巧没有太大用处。以后的维护或者交接搞死人。

wajlh 发表于 2020-7-15 11:45:36

OOXX110 发表于 2020-7-15 11:36
直接0101010效率更高

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

makesoft 发表于 2020-7-15 11:46:35

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

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

xyz543 发表于 2020-7-15 11:56:05

关闭编译器的优化后效率也蛮高的。

takashiki 发表于 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%的空间占用。代码在关键的时候还是需要考虑的,然而并没有啥用。

cy18 发表于 2020-7-15 12:45:48

gcc的嵌汇编语法比较强,可以设定用了哪些寄存器,防止编译器优化的时候其他代码误用寄存器,把汇编封装好之后基本不会有隐患。keil不知道有没有类似的语法

wye11083 发表于 2020-7-15 13:00:42

cy18 发表于 2020-7-15 12:45
gcc的嵌汇编语法比较强,可以设定用了哪些寄存器,防止编译器优化的时候其他代码误用寄存器,把汇编封装好 ...

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

makesoft 发表于 2020-7-15 13:02:59

wye11083 发表于 2020-7-15 13:00
嵌入汇编太难了,我到现在也学不会。几个参数映射理解不了。所以我到现在也只嵌几条固定指令。 ...

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

armok. 发表于 2020-7-15 13:35:42

打赏!

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

wye11083 发表于 2020-7-15 13:44:06

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

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

wye11083 发表于 2020-7-15 13:44:42

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

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

t3486784401 发表于 2020-7-15 13:48:25

Arduino 和 C++ 捂脸跑开......

一夕nandy 发表于 2020-7-15 18:33:34

毕业后就一直改用IAR了~

PPS 发表于 2020-7-15 22:00:03

我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候出钱来找我

shiva_shiva 发表于 2020-7-16 09:07:28

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

你这是拥码自重啊

epwwm 发表于 2020-7-16 09:13:33

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

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

浮华一生 发表于 2020-7-16 11:00:26

makesoft 发表于 2020-7-15 11:43
SETB    sbxLcdRS
            MOV   P0,R6
            CLR   sbnLcdWR


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

makesoft 发表于 2020-7-16 11:02:38

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

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

motor_control 发表于 2020-7-16 11:51:55

本帖最后由 motor_control 于 2020-7-16 11:54 编辑

epwwm 发表于 2020-7-16 09:13
想多了,找个人,用C 再写一次,就没你什么事了

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

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

lyl1070 发表于 2020-11-24 17:55:23

motor_control 发表于 2020-7-16 11:51
如果是比较牛逼的算法,找人用c也不见得搞得定。

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

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

motor_control 发表于 2020-11-24 17:59:28

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

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

simplorer 发表于 2020-11-25 17:14:28

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

trigrass12 发表于 2020-11-26 10:01:06

还在研究这些奇淫技巧,没什么用

motor_control 发表于 2020-11-26 10:26:42

本帖最后由 motor_control 于 2020-11-26 10:27 编辑

trigrass12 发表于 2020-11-26 10:01
还在研究这些奇淫技巧,没什么用

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

NM2012 发表于 2020-11-26 11:40:40

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

不要了从新写

motor_control 发表于 2020-11-26 14:34:24

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

是个好方法!

snoopyzz 发表于 2020-11-26 14:49:50


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

snoopyzz 发表于 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);
}

kap 发表于 2020-11-26 15:00:03

驱动spi液晶屏,用汇编刷新速度就比c快很多

mon51 发表于 2021-1-20 10:35:22

30年的编程经验:维护、更新远大于程序优化。

ordman 发表于 2021-1-20 11:14:27

汇编最大的问题是一段时间后自己都看不懂了,还怎么维护啊?

boyiee 发表于 2021-1-20 12:55:55

管他作甚,1块钱的单片机不行就换两块钱的。
用着舒服效率高就行了。

zhanyanqiang 发表于 2021-1-20 13:11:04

wajlh 发表于 2020-7-15 11:43
要那么高效率干嘛,性能不够换芯片好了,大把高性能的芯片可选。

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

zhanyanqiang 发表于 2021-1-20 13:12:38

epwwm 发表于 2020-7-16 09:13
想多了,找个人,用C 再写一次,就没你什么事了

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

makesoft 发表于 2021-1-20 13:46:12

mon51 发表于 2021-1-20 10:35
30年的编程经验:维护、更新远大于程序优化。

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

makesoft 发表于 2021-1-20 13:47:06

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

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

makesoft 发表于 2021-1-20 16:16:12

kap 发表于 2020-11-26 15:00
驱动spi液晶屏,用汇编刷新速度就比c快很多

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

first_blood 发表于 2021-1-20 21:43:54

spi刷屏,区域刷屏,用DMA快很多

yikeai 发表于 2021-1-20 23:02:44

做小家电方案都是用义隆,应广这些便宜的单片机,汇编还真的不能放弃。

zhugean 发表于 2021-1-21 09:12:20

zhanyanqiang 发表于 2021-1-20 13:12
空间就4K,汇编写完4K,你重写吧~~~

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

kitten 发表于 2021-1-21 15:01:52

zhanyanqiang 发表于 2021-1-20 13:12
空间就4K,汇编写完4K,你重写吧~~~

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

zhanyanqiang 发表于 2021-1-21 15:20:02

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

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

zhanyanqiang 发表于 2021-1-21 15:39:02

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

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

FireBrain 发表于 2021-1-21 16:30:58

汇编只适合自己玩,公司是极少用到的

kitten 发表于 2021-1-21 17:52:04

zhanyanqiang 发表于 2021-1-21 15:20
一个月出货50W个的东西,你随便加成本?

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

zhanyanqiang 发表于 2021-1-22 09:58:27

kitten 发表于 2021-1-21 17:52
省下来的钱跟你有关系么?东西一定是便宜的就是对的?

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

kitten 发表于 2021-1-22 10:27:52

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

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

canspider 发表于 2021-1-22 10:31:30

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

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

maxking 发表于 2021-1-25 11:36:21

以上总结精辟{:biggrin:}

wajlh 发表于 2021-1-28 01:35:28

zhanyanqiang 发表于 2021-1-20 13:11
你是老板就不会这么认为了~~~5毛的芯片能干的事情,非得上5块的

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

zhanyanqiang 发表于 2021-1-28 09:31:30

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

话是这个理

redroof 发表于 2021-1-28 09:53:16

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

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

chenyuhan 发表于 2022-8-30 12:01:15

一个LCD刷屏驱动 优化和不优化能差到好几倍性能
还有就是拿stm32的c语言刷屏代码直接编译到51上面用 简直是一场灾难

xmlbb 发表于 2022-8-31 16:29:32

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

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

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

zhanyanqiang 发表于 2022-8-31 16:33:20

xmlbb 发表于 2022-8-31 16:29
有0.25k已经不错了,我当时接了一个,只剩下8字节了。

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

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

xmlbb 发表于 2022-8-31 16:39:26

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

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

ibmx311 发表于 2022-8-31 22:38:10

所以自从欧洲订单没了以后好几个月了,我也不把产品冲进国内市场。中国人的聪明劲是用来省钱的,而欧洲人也很算计,但他们的算计是如何把事情做的更好。本来这样的贴子是一个很好的技术帖子 ,但问题很快被升级到了钱上,算吧,直至把自己都算计死。

Landmark 发表于 2022-9-1 08:53:16

xmlbb 发表于 2022-8-31 16:29
有0.25k已经不错了,我当时接了一个,只剩下8字节了。

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

我用c写消费类的程序,经常是剩下几个字节的。
页: [1]
查看完整版本: KEIL编译效率还是很低,常用的接口还是汇编写效率高