CrazyTT

    1. 本帖最后由 CrazyTT 于 2024-7-16 15:04 编辑 我靠,大家的答案竟然出奇的一致。 首先看你用的是什么处理器,其次还要看你使用的什么工具链。 因为汇编的指令以及指令格式在不同的架构是不同的,所以要看你用什么处理器。 因为不同的工具链,汇编文件的格式也会存在差异,所以还要看你用什么工具链。 我觉得从单片机的启动那儿看,一般的单片机启动时用的汇编来操作。
    2. 编译错误的问题 3/612 stm32/stm8 2024-06-24
      工具链配置错误了吧,注意点点armcc与armclang工具链的配置   下面编译用的是armclang,--no-multibyte-chars是armcc的参数;
    3. c语言项目实例 11/554 Linux与安卓 2024-06-24
      C的线程进程网络这些高级一点东西学下,然后用起来,用这些做一些小工具之类的
    4. 请教赋值的问题 11/699 单片机 2024-05-15
      本帖最后由 CrazyTT 于 2024-5-15 18:18 编辑
      一沙一世 发表于 2024-4-25 23:02 谢谢,为什么提升  c  和 0XF0不都是  单字节的数据吗  
      0xF0就是单字节数据这个认为是错误的,不能看到数据的大小就猜想它是什么样的数据,这个是要看编译器的,对编译器而言,这种数据都会作为int型来处理;这里面的0xF0与4都是int的类型
    5. 我个人觉得,影响系统实时性的主要因素不在于你使用了C语言还是汇编语言。   不是说汇编写的程序就实时性高;实时性跟你所使用的硬件平台,以及所使用的操作系统这些都有关系;如果你是裸机程序,你的一些中断操作都可能会影响系统的实时性。 现在基本都不使用汇编写了,你能保证你用汇编写的代码会比C编译器优化后的效率高吗。
    6. pcb新手封装疑惑请指教 19/3380 PCB设计 2024-03-22
      不管是r0603,还是c0603,都属于是0603,只是大家改了被名字这么叫,好区分;例如给3D封装的时候,电阻和电容的效果可以做得不一样
    7. QWE4562009 发表于 2024-3-22 13:38 为啥在其他的电脑能够烧录呢 
      如果其他电脑可以,可以看看JFlash(GDBServer)的版本是不是存在区别,尽量使用相同版本,还有就是有没有使用不同的烧写算法
    8. 来自新手的疑惑, 11/790 stm32/stm8 2024-03-22
      还有你这个代码在编译时,应该会报警告信息,提示你anjian(void)这个函数缺少return;你可以详细去找一找,编译时的警告最好不要放过,要确定为什么会出现这个警告,明确这个警告会不会对你的代码逻辑产生影响。
    9. 来自新手的疑惑, 11/790 stm32/stm8 2024-03-22
      本帖最后由 CrazyTT 于 2024-3-22 14:33 编辑 你想问的那个问题总结就是,anjian(void)这个函数的逻辑上还存在缺陷,语法上也有问题,缺少 a!=b 这一种情况的返回,导致在按键按下或者松开时,anjian(void)函数的返回值是不确定的,你的这个代码中这个不确定的返回值可能就刚好受 b=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12); 这句语句的影响。   如果按键按下后是低电平,松开后是高电平; 当按键按下时,HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)返回0赋值给b,由于此时a与b不同,anjian(void)没有return语句,这个0同时作为了anjian(void)的返回值,也就满足了anjian()==0,所以return 1;  anjian()==0时是按下时响应; 当按键松开时,HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)返回1赋值给b,由于此时a与b不同,anjian(void)没有return语句,这个1同时作为了anjian(void)的返回值,也就满足了anjian()==1,所以return 0;  anjian()==1时是松开时响应; 没有按键动作的时候,是通过if(a==b)这儿return返回的,return的是多少anjian()就等于多少。   总结一下就是,函数的逻辑要写全,需要返回值的函数,一定要显示的return,不能想当然,一定要按照规范来,不然编译器也不知道你到底想做什么。
    10. 来自新手的疑惑, 11/790 stm32/stm8 2024-03-22
      以下是个人觉得,详细原因写在后面的,你的可以慢慢看。 看了你的代码,你想通过在两个时刻获取到的电平不同来判断是否有按键按下,但是你的代码里面存在很严重的问题,就anjian()这个函数当中,你只做出了按键值相同时return 1,但你对于按键值不同的情况并未返回; 这就会导致一个问题,anjian()函数在按键值(a与b)不同的时候,函数的返回值到底是什么,你想的应该是0,因为你后面判断anjian()==0;但实际上这个值并不是这样的,下面就来具体说明; 在通常的arm架构芯片当中,会以寄存器r0来作为函数返回值使用,对于return 1;  anjian()==0这种情况,当按键没按下时,函数使用return 1返回,这是r0就是1,当按键按下时,函数不再是return 1返回,这时的函数没有显示的return语句,r0的值未知,可能是0,也可能不是,可能你的刚好是0,所以anjian()==0成立,就有了动作; 改成 return 0; anjian()==1时也是同理,当按键保持按下时,读到的按键值a与b的相同,使用return 0返回,这时anjian()==1不成立;当按键松开时,此时的函数返回没有使用return,r0的值就是未知的,你的可能刚好r0=1,所以anjian()==1成立,就有了动作。 如果你想问为什么这么巧合,r0前面那个就是0,后面这个就变成了1;这我想说,这涉及到编译器和处理器架构的知识,如果你完全遵循C语言的规范进行C代码开发,这些问题基本不会遇到,后面的你可以当听个笑话。 可能是受到b=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12);这句的影响,这里面可能涉及到函数返回这些,可能就修改了r0的值。 如果按下后引脚电平是低,HAL_GPIO_ReadPin就会返回0,这句就会为b赋值为0,就可能r0的值会是0,当按键按下后anjian()==0就成立了; 改成return 0; anjian()==1后,这时,b=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_12)这句,HAL_GPIO_ReadPin返回1,b就会赋值成1,这时r0可能是1,所以anjian()==1就成立了 代码不止给机器用,也是给人看的,编写代码时要做到相应的规范,该写详细的地方就写详细一点,该打的括号就打上,虽然有些地方省了语法上没什么问题,但对于维护和使用代码的来说,可能带来一些麻烦。
    11. 转载《从 Arm® Compiler 5 迁移到 Arm® Compil... 17/2126 国产芯片交流 2024-03-21
      lugl4313820 发表于 2024-3-20 10:03 这几天在看ARM-CORTEX M0权威,也有看到AC6的知识,可能AC5要被替换了。
      不是可能,是已经在替换了
    12. 转载《从 Arm® Compiler 5 迁移到 Arm® Compil... 17/2126 国产芯片交流 2024-03-21
      bobde163 发表于 2024-3-19 08:47 我同事在使用AC6编译器之后遇到了一些奇怪的问题,有些问题的现象跟文中的描述还是有关联,那既然AC5迁移到 ...
      会发现AC6更GCC的有些内容会相似了
    13. STM32ARM处理器经验分享 5/3035 嵌入式系统 2024-03-21
      无论是晶振还是什么时钟,都会有误差
    14. 或者读取 0x1FFFF7E0 看看低16位是多大,低16位是指示的主flash的大小
    15. 用JFlash把闪存擦一下试试,或者换个板子试一试
    16. 一個年過三十的開發人員的困惑 12/4645 嵌入式系统 2024-03-20
      没注意这都是08年的帖子了,不知现在如何
    17. 一個年過三十的開發人員的困惑 12/4645 嵌入式系统 2024-03-20
      wangzelin311 发表于 2008-10-21 17:35 感謝各位的回復 我想請教的是,以我的基礎,學習嵌入式開發大約要多長時間可以入門. 要如何做才能取 ...
      嵌入式的范围比较大,工作不一定就需要对硬件有多了解;入门可能用不了多长时间,但要想未来好发展要看的、要学的和要做的东西还是很多。

最近访客

现在还没有访客

< 1/0 >

统计信息

已有--人来访过

  • 芯积分:71
  • 好友:--
  • 主题:1
  • 回复:17

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言