热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

shell脚本之位运算+for循环+返回值承接

用shell脚本实现某个寄存器的某几位设置坑位1:开发板上不认(ubuntu上可以)for((i0;i

用shell脚本实现某个寄存器的某几位设置

坑位1:

开发板上不认(ubuntu上可以)

for (( i=0;i<6;i++ ))

do

done

换成:

for i in `seq 0 6`

do

done

坑位2:

返回值承接用#?时默认只截取低8位

setbits  $1 $2 $3 $4
regv=$?
printf "regv= %#x\n" $regv

发现只剩低八位


所以,换种承接方式吧:
 regv=`regread $1`
这种方式是直接将命令执行或在屏幕上输出的东西接过来,是字符串。

坑位3:

如上面,reg=`regread $1`得到的字符串若用printf  "%d" 是打印不到的,直接echo才行

坑位4:

reg=setbits $1 $2 $3 $4 这种方式来承接会爆语法错误,不是C语言。

最终测试成功,如下:

#######################################################                                              
#  test the sar-adc in SOC                                                                           
#######################################################                                              
                                                                                                     
regwrite()                                                                                           
{                                                                                                    
        devmem $1 32 $2                                                                              
}                                                                                                    
                                                                                                     
regread()                                                                                            
{                                                                                                    
        devmem $1                                                                                    
}                                                                                                    
                                                                                                     
##argv[1] :origin data                                                                               
##argv[2] :start bit                                                                                 
##argv[3] :end bit                                                                                   
##argv[4] :result                                                                                    
setbits()                                                                                            
{                                                                                                    
        value=$1                                                                                     
        for i in `seq $2 $3`                                                                         
        do                                                                                           
                mask=$(( 0x1 <<$i ))                                                                
                #printf "mask = %#x\n" $mask                                                         
                value=$(( $value & ~$mask ))                                                         
                #printf "clean bit %d value = %#x\n" $i $value                                       
                mask1=$(( 0x1 <<($i - $2) ))                                                        
                #printf "mask1 = %#x\n" $mask1                                                       
                bitv=$(( $4 & mask1 ))                                                               
                #printf "bitv = %#x\n" $bitv                                                         
                value=$(( $value | ($bitv <<$2)  ))                                                 
                #printf "set bit %d value = %#x\n" $i $value                                         
        done                                                                                         
                printf "%#x\n" $value                                                                
                return $value                                                                        
}                                                                                                    
                                                                                                     
                                                                                                     
reg_set_bits()                                                                                       
{                                                                                                    
        regv=`regread $1`                                                                            
        regv=`setbits $regv $2 $3 $4 `                                                               
        regwrite $1 $regv                                                                            
}                                                                                                    
                                                                                                     
                                                                                                     
                                                                                                     
reg_set_bits $1 $2 $3 $4   

shell脚本之位运算+for循环+返回值承接


推荐阅读
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 驱动程序的基本结构1、Windows驱动程序中重要的数据结构1.1、驱动对象(DRIVER_OBJECT)每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱 ... [详细]
  • 在 PHP 中,使用 `continue` 关键字结合数字可以有效地终止嵌套的 `foreach` 循环。本文将详细介绍如何使用 `continue` 加数字来控制不同层次的循环。 ... [详细]
  • 解决网页乱码问题的实用方法
    网页乱码问题在开发中较为常见,主要由文件编码、程序字符集设置和数据库连接字符集设置不当引起。本文将详细介绍如何逐一排查并解决这些问题。 ... [详细]
  • 本文通过一个示例展示了如何使用HTML和CSS美化并实现响应式的按钮组。 ... [详细]
  • 本文介绍了三种解决 Git Push 冲突的方法,包括创建新分支、手动解决冲突和强行推送。这些方法适用于不同的开发场景,如版本迭代、多人协作和个人开发。 ... [详细]
  • Excel VBA自动化添加数字证书(续)
    本文继续探讨如何在Excel VBA中自动添加数字证书。上一篇文章因突发情况未能完成,本次将详细介绍证书的生成和集成方法。 ... [详细]
  • 使用外部样式表实现盒子居中对齐
    本文介绍如何在HTML文件中引入外部CSS样式表,并通过CSS实现盒子的居中对齐。 ... [详细]
  • 本文章提供了适用于 Cacti 的多核 CPU 监控模板,支持 2、4、8、12、16、24 和 32 核配置。请注意,0.87g 版本的 Cacti 需要手动修改哈希值为 0021 才能使用,而 0.88 及以上版本则可直接导入。 ... [详细]
  • Gty的二逼妹子序列 - 分块与莫队算法的应用
    Autumn 和 Bakser 正在研究 Gty 的妹子序列,但遇到了一个难题。他们希望计算某个区间内美丽度属于 [a, b] 的妹子的美丽度种类数。本文将详细介绍如何利用分块和莫队算法解决这一问题。 ... [详细]
  • 年前,我发表了一篇文章,分享了自己通过在线教育平台学习IT技能的经历。文中详细探讨了在线教育与传统线下教育在技能培训方面的优缺点。许多网友在讨论在线教育时,常常提到“在线教育是否缺乏学习氛围”的问题。本文将对此进行深入分析。 ... [详细]
  • 从零开始编译Linux系统:第16章 全新起点
    本章将详细介绍如何从零开始编译一套完整的Linux系统,涵盖关键组件如glibc库的介绍及其重要性。通过本文,读者将了解从源代码构建Linux系统的全过程。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • JavaSE For循环入门示例
    本文将介绍Java中For循环的基本概念和使用方法,通过几个简单的示例帮助初学者更好地理解和掌握For循环。 ... [详细]
  • SvpplyTable: 实现可扩展和可折叠的菜单动画
    SvpplyTable 是一个示例项目,旨在实现类似 Svpply 应用程序中的可扩展和可折叠的菜单动画效果。该项目托管在 GitHub 上,地址为 https://github.com/liuminqian/SvpplyTable。 ... [详细]
author-avatar
僵小鱼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有