KEIL编译效率还是很低,常用的接口还是汇编写效率高
参数R6/R7 ->R4/R5 来回折腾,效率低很多很多,直接送数多省事啊{:lol:}。直接0101010效率更高{:lol:} 就是,不但来回折腾,而且还搞得跟寄存器组0相关,都埋雷了。不折腾这一下啥问题都没 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:} 要那么高效率干嘛,性能不够换芯片好了,大把高性能的芯片可选。 这种技巧没有太大用处。以后的维护或者交接搞死人。 OOXX110 发表于 2020-7-15 11:36
直接0101010效率更高
0101也未必能写出效率更好的,大牛除外。用C语言 99%的人写出来的程序都不会太差。但是用0101写99%的人都写不出好的程序来。 wajlh 发表于 2020-7-15 11:45
0101也未必能写出效率更好的,大牛除外。用C语言 99%的人写出来的程序都不会太差。但是用0101写99%的人 ...
这句话同意,用汇编写出狗屎样的程序人多着呢 关闭编译器的优化后效率也蛮高的。
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%的空间占用。代码在关键的时候还是需要考虑的,然而并没有啥用。 gcc的嵌汇编语法比较强,可以设定用了哪些寄存器,防止编译器优化的时候其他代码误用寄存器,把汇编封装好之后基本不会有隐患。keil不知道有没有类似的语法 cy18 发表于 2020-7-15 12:45
gcc的嵌汇编语法比较强,可以设定用了哪些寄存器,防止编译器优化的时候其他代码误用寄存器,把汇编封装好 ...
嵌入汇编太难了,我到现在也学不会。几个参数映射理解不了。所以我到现在也只嵌几条固定指令。 wye11083 发表于 2020-7-15 13:00
嵌入汇编太难了,我到现在也学不会。几个参数映射理解不了。所以我到现在也只嵌几条固定指令。 ...
汇编文件和C文件在一个项目里混合编程还是挺方便的,我也不喜欢函数内嵌入汇编。 打赏!
庆祝论坛“打赏”功能实施, 现在开始发技术主题,可以获得打赏
https://www.amobbs.com/thread-5735948-1-1.html makesoft 发表于 2020-7-15 13:02
汇编文件和C文件在一个项目里混合编程还是挺方便的,我也不喜欢函数内嵌入汇编。 ...
这个倒是真的,有些代码没法用C写(涉及到最底层寄存器调度之类的代码)。C适合用来做算法、逻辑等等,汇编适合实现底层平台架构。比如多线程切换,用C是没法写的,但是用汇编就很容易把寄存器搬运到位。 takashiki 发表于 2020-7-15 11:58
再干掉一条指令,Keil编译的占用21Byte,你手写后占用15Byte,减少了28.6%的Flash占用。我再减少2字节, ...
然后你会发现你花了几天时间优化的代码没法维护了{:lol:} {:lol:} Arduino 和 C++ 捂脸跑开...... 毕业后就一直改用IAR了~ 我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候出钱来找我 PPS 发表于 2020-7-15 22:00
我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候 ...
你这是拥码自重啊 PPS 发表于 2020-7-15 22:00
我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候 ...
想多了,找个人,用C 再写一次,就没你什么事了 makesoft 发表于 2020-7-15 11:43
SETB sbxLcdRS
MOV P0,R6
CLR sbnLcdWR
一直好奇,嵌入汇编的时候 会不会破坏C原本的寄存器值啊, 呃,意思就是调用汇编的时候怎么知道当时那些寄存器再被使用呢,编译器会自己保护现场么? 浮华一生 发表于 2020-7-16 11:00
一直好奇,嵌入汇编的时候 会不会破坏C原本的寄存器值啊, 呃,意思就是调用汇编的时候怎么知道当时那些 ...
保护现场在汇编里面自然要你自己写了,用到的资源肯定需要入栈和出栈,带入和带出的参数在编译器里面有详细的规定。 本帖最后由 motor_control 于 2020-7-16 11:54 编辑
epwwm 发表于 2020-7-16 09:13
想多了,找个人,用C 再写一次,就没你什么事了
如果是比较牛逼的算法,找人用c也不见得搞得定。
现在这个时代真的就不用再搞什么汇编了,除非你是程序稳定不怎么修改,出货量极大。 motor_control 发表于 2020-7-16 11:51
如果是比较牛逼的算法,找人用c也不见得搞得定。
现在这个时代真的就不用再搞什么汇编了,除非你是程序 ...
想多,软件认证的部分你不用汇编根本没法写。 lyl1070 发表于 2020-11-24 17:55
想多,软件认证的部分你不用汇编根本没法写。
现在用汇编写绝对不是主流,你说的这种情况肯定有,但绝非趋势。 你费劲心力提高的那30%性能,还不如直接找个主频翻倍的mcu来的容易。
但是你耗费的时间成本,很难抹平了。
所以现在除非是搞系统移植,关键算法,不要想着汇编了。
要说还是ti的dsp搞得不错,封装了一些底层指令,也算汇编,但是使用起来容易多了。 还在研究这些奇淫技巧,没什么用 本帖最后由 motor_control 于 2020-11-26 10:27 编辑
trigrass12 发表于 2020-11-26 10:01
还在研究这些奇淫技巧,没什么用
汇编还是很重要的,只是以C为主了。 PPS 发表于 2020-7-15 22:00
我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候 ...
不要了从新写 PPS 发表于 2020-7-15 22:00
我突然想到一个赚双倍工资的办法,在一个公司用汇编写代码,然后离职换工作,这样原公司需要维护代码的时候 ...
是个好方法!
我不觉得这我哪里刷新慢了, 我这是16位刷屏, 楼主好像是8位的 而且楼主写成了函数, 会发生跳转, 为了效率应该直接循环, 而且一次循环就写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);
} 驱动spi液晶屏,用汇编刷新速度就比c快很多 30年的编程经验:维护、更新远大于程序优化。 汇编最大的问题是一段时间后自己都看不懂了,还怎么维护啊? 管他作甚,1块钱的单片机不行就换两块钱的。
用着舒服效率高就行了。 wajlh 发表于 2020-7-15 11:43
要那么高效率干嘛,性能不够换芯片好了,大把高性能的芯片可选。
你是老板就不会这么认为了~~~5毛的芯片能干的事情,非得上5块的 epwwm 发表于 2020-7-16 09:13
想多了,找个人,用C 再写一次,就没你什么事了
空间就4K,汇编写完4K,你重写吧~~~ mon51 发表于 2021-1-20 10:35
30年的编程经验:维护、更新远大于程序优化。
有些道理,几年前的程序看起来都很陌生,怀疑是自己写的吗?
程序升级更改都是愁人的事,上万行的程序有注释也是不敢妄动的。 ordman 发表于 2021-1-20 11:14
汇编最大的问题是一段时间后自己都看不懂了,还怎么维护啊?
俺C程序几年后自己都不认识了,还说汇编呢? kap 发表于 2020-11-26 15:00
驱动spi液晶屏,用汇编刷新速度就比c快很多
回帖指标用完了,再回复一个。 spi刷屏,区域刷屏,用DMA快很多 做小家电方案都是用义隆,应广这些便宜的单片机,汇编还真的不能放弃。 zhanyanqiang 发表于 2021-1-20 13:12
空间就4K,汇编写完4K,你重写吧~~~
电工就是这样被自己逼死的 zhanyanqiang 发表于 2021-1-20 13:12
空间就4K,汇编写完4K,你重写吧~~~
就不会换个8K的?这都啥年代了。写单片机的要跟写APP的学习一下,搞聊天APP的动辄几个G,运行卡顿?不好意思请换最新款手机。运行有bug?不好意思3年前的手机型号我们已经不维护了。 kitten 发表于 2021-1-21 15:01
就不会换个8K的?这都啥年代了。写单片机的要跟写APP的学习一下,搞聊天APP的动辄几个G,运行卡顿?不好意 ...
一个月出货50W个的东西,你随便加成本? yikeai 发表于 2021-1-20 23:02
做小家电方案都是用义隆,应广这些便宜的单片机,汇编还真的不能放弃。
是的,不止家电,还有好多其他行业还在用几毛的芯片 汇编只适合自己玩,公司是极少用到的 zhanyanqiang 发表于 2021-1-21 15:20
一个月出货50W个的东西,你随便加成本?
省下来的钱跟你有关系么?东西一定是便宜的就是对的? kitten 发表于 2021-1-21 17:52
省下来的钱跟你有关系么?东西一定是便宜的就是对的?
哎....在公司接手了一个之前人用汇编写的程序,一个月出货50W个,空间就4K,汇编写的,空间已经只剩0.25K,汇编留下的程序也是乱七八糟的,领导希望你不增加成本的前提下增加其他功能,时间又紧,按照理论计算汇编是能写下的,你是打算看完人家的汇编还是按功能自己换成C(C估计是写不下了),还是换芯片?告诉你换芯片这么大的出货量如果没有非常详细的测试大概率是会出问题的。。。。辞职不干?关键所在岗位工资还可以哦,身边真实的,你怎么办? zhanyanqiang 发表于 2021-1-22 09:58
哎....在公司接手了一个之前人用汇编写的程序,一个月出货50W个,空间就4K,汇编写的,空间已经只剩0.25K, ...
看钱那就忍忍呗,能怎么办?不过前人都跑了是由原因的。 zhanyanqiang 发表于 2021-1-22 09:58
哎....在公司接手了一个之前人用汇编写的程序,一个月出货50W个,空间就4K,汇编写的,空间已经只剩0.25K, ...
三条路
1. 拿工资,尽量做,不保证能做出来(等人喂饭)
2. 拿提成,使出浑身解术做,一定要做出来(跟着喝汤)
3. 开公司,同第2点,以新功能为卖点切入市场(吃肉) 以上总结精辟{:biggrin:} zhanyanqiang 发表于 2021-1-20 13:11
你是老板就不会这么认为了~~~5毛的芯片能干的事情,非得上5块的
话说一个月都出货50K了,赚的钱还差这点单片机的钱? 老板的毛病都是工程师惯出来的。出货50K的行业几毛钱都差的话,那就别干了,挣这辛苦钱有啥意思?芯片价格有点波动生意都要赔钱了。还不如干点别的高利润的事情。 wajlh 发表于 2021-1-28 01:35
话说一个月都出货50K了,赚的钱还差这点单片机的钱? 老板的毛病都是工程师惯出来的。出货50K的行业几毛 ...
话是这个理 wajlh 发表于 2021-1-28 01:35
话说一个月都出货50K了,赚的钱还差这点单片机的钱? 老板的毛病都是工程师惯出来的。出货50K的行业几毛 ...
很多量大的低技术东西就这样啊,一个赚5毛,5万个就赚25000,恰好够自己的工资。如果多5毛成本他就不用拿工资了,白干 一个LCD刷屏驱动 优化和不优化能差到好几倍性能
还有就是拿stm32的c语言刷屏代码直接编译到51上面用 简直是一场灾难 zhanyanqiang 发表于 2021-1-22 09:58
哎....在公司接手了一个之前人用汇编写的程序,一个月出货50W个,空间就4K,汇编写的,空间已经只剩0.25K, ...
(引用自51楼)
有0.25k已经不错了,我当时接了一个,只剩下8字节了。
根据我的经验,程序写得越乱,说明优化的空间越大,任务越容易完成。 xmlbb 发表于 2022-8-31 16:29
有0.25k已经不错了,我当时接了一个,只剩下8字节了。
根据我的经验,程序写得越乱,说明优化的空间越大 ...
(引用自59楼)
厉害,我已经跑路~~~不搞了,难住我了 wajlh 发表于 2021-1-28 01:35
话说一个月都出货50K了,赚的钱还差这点单片机的钱? 老板的毛病都是工程师惯出来的。出货50K的行业几毛 ...
(引用自55楼)
你不惯别人惯呀,你如果说这不可能的,换个容量大一点的吧,那么老板就拿一模一样的东西给你,说,你看,别人已经完成了,哈哈,这就是内卷吧。 所以自从欧洲订单没了以后好几个月了,我也不把产品冲进国内市场。中国人的聪明劲是用来省钱的,而欧洲人也很算计,但他们的算计是如何把事情做的更好。本来这样的贴子是一个很好的技术帖子 ,但问题很快被升级到了钱上,算吧,直至把自己都算计死。 xmlbb 发表于 2022-8-31 16:29
有0.25k已经不错了,我当时接了一个,只剩下8字节了。
根据我的经验,程序写得越乱,说明优化的空间越大 ...
(引用自59楼)
我用c写消费类的程序,经常是剩下几个字节的。
页:
[1]