編程思想:程序自身的模型/函數模型硬件標準如何實現

前言

? ? ? ? 前面提到過寫程序的過程:根據各種需求,構建程序模型(邏輯模型),再用代碼實現.本貼關于程序自身的模型以及函數模型,以及推導硬件標準從邏輯到代碼的思路.

程序自身的模型

? ? ? ? 如圖

?應用APP

????????接受輸入---鼠標動作,鍵盤輸入的字符等,得到結果---畫面,顯示數據等.

工具

????????包括框架和編程語言等都屬于編程工具,工具是程序員學習的主要部分.經典描述---程序=數據結構+算法.工具解決的兩大問題:數據的表達,以及邏輯的建立.邏輯表現在函數的定義(函數模型在后面講述).數據和邏輯兩大部分和硬件有著對應關系,機器關注的也是數據和邏輯,只是表現形式不一樣,邏輯被化作指令碼,數據化成地址.所以一個好的程序員對指令集也應該有一定理解.

? ? ? ? 程序的輸出最終會成為硬件狀態的變化.框架封裝硬件標準來控制硬件(后面討論硬件實現的思路).

編譯

????????程序員在IDE(集成開發環境)里寫的內容叫做"代碼",是一個包含空白符(空格,換行符,tab)的字符串,芯片不認識代碼.所以需要用編譯器,使代碼成為具有一定語義的單詞,這個過程就是編譯.編譯的意義之一是認識到所有的語言,或者程序員的寫下的字符都是工具,通過編譯才讓這些字符有了意義.

目標語言

? ? ? ? 可以被芯片識別和執行的指令.物理形式是二進制數(很多和計算機有關的圖片喜歡用一連串的0和1,就是表達在底層起作用的是0和1的組合).內容仍然是數據和邏輯.表示邏輯的二進制數交給PC(程序計數器),表示數據的二進制數表示數值或者地址.地址用于數據傳遞,數值表示結果.

? ? ? ? 機器碼很難讀,所以把他化成較為容易理解的匯編指令.匯編指令也不是很多,常見的有立即數,尋址,跳轉,移動(move),在高級語言如C語言中有對應的定義.除非高級語言中沒有對應定義(如時鐘)再考慮底層的內容.

函數模型

? ? ? ? 函數是把邏輯和實現結合起來的一種形式.函數名稱是程序員要做的事,函數內容是如何實現這件事,函數形參是做這件事需要處理的數據,把他們結合起來就是如何用數據的變化來做成想做的事.

? ? ? ? 函數可能有返回值也可能沒有返回值.返回值和邏輯本身沒有聯系.返回值給調用函數一個結果.這個結果可能會用到下一個函數調用中.

/*偽代碼*/
void fun(){     //函數名表示邏輯,沒有參數傳入/*函數體*/....        //語句---數據變化
}

抽象和推導? ? ? ?

? ? ? ? 筆者把人的思考方式簡單分成抽象和推導兩種.思考能力相應分為抽象能力和推導能力.?

? ? ? ? 抽象是從現象中抽取普遍規律,形成公理,定理或規則的過程.推導與抽象相反,是從已知的公理/定理/規則出發,得到結論,關系,模型的過程.兩者相比,抽象比推導難,科學界的許多成果都是建立在抽象的基礎上(并驗證).

? ? ? ? 思考能力和人的聰明程度是正相關的.學習能力強的人會思考.學習是一種模仿,方法有推導,記憶,有窮假設等.有的人學習時候沒注意這方面能力的培養,單單采用反復記憶加練習(當然即使思維能力強,這兩項也是必須的).推導能力強的人學習效果更好.所以在學習的過程中,時常要訓練自己的思維,讓自己的學習能力變強.

? ? ? ? 從<簡單邏輯學>這本書里,推導有個簡單的公式,離散數學里也有提到

A∈B,B→C,則A→C

? ? ? ? 當A屬于B的范疇,B能得到C,則A也能推導出C?

硬件標準實現的思路

? ? ? ? 以下為筆者推導思路,不保證準確.

? ? ? ? 硬件作為一個程序中的模塊,以文件形式被某種語言的主程序調用.假設硬件標準中有一個畫直線的函數,該如何實現呢?

? ? ? ? 1>從物理結構上看,硬件以含若干根導線的接口和計算機相連接.操作系統可以訪問這些端口并把數據寫入,以達到交換數據控制硬件的目的.那么操作系統是怎么識別到端口的呢?筆者想應該是由硬件驅動程序來完成.硬件驅動程序指明通信的端口,操作系統通信時調用驅動來實現數據傳送.

? ? ? ? 2>端口導線通常不會很多,直接控制寄存器是不夠的.例如8根線的端口只能控制8位.假設硬件有128M空間,那么應該有一種機制來保證數據能傳給這128M空間.假設端口就是8位的,那么和8位端口直連的硬件部分作為數據緩沖區,另外想辦法把緩沖區數據傳遞出去.

? ? ? ? 3>為了實現緩沖區和硬件寄存器區的數據傳遞,在硬件的控制電路中設置一個模式,在這種模式下定義一個硬件標準,先指明傳遞數據的地址,再傳數據過去.

? ? ? ? 假設data_on()函數用于操作系統傳遞數據給硬件,change_on()用于硬件內部傳遞數據.

/*偽代碼*/
//端口地址由驅動給出,可以作為全局變量或局部變量,如果作為局部變量,要在data_on()函數內定義形參
int addr=端口地址;    /*把數據傳給緩沖區*/
void data_on(int value){int *p=addr;*p=value;
}

????????change_on()和data_on()互斥,此時操作系統和硬件不能傳遞數據,用于硬件內部數據傳遞.

? ? ? ? 在此基礎上,寫出偽代碼---buf是緩沖區,pointer是硬件內部數據指針

/*偽代碼---標準的實現*/
void line(int x_start,int y_start,int x_end,int y_end){/*第一次傳8位數據給pointer指向的地址*/data_on();change_on();move(buf,pointer);/*第二次傳8位數據給pointer指向的地址*/data_on();change_on();move(buf,pointer+8);
}

? ? ? ? 寫到這里,相信新的問題又給看出來了.pointer這個硬件寄存器的指針如何實現?很容易想到的是在操作系統端實現這個指針.即硬件設計為操作系統操作端口數據,來控制硬件寄存器.

/*主程序端偽代碼*/line(2,3,3,5);    //從坐標2,3到3,5畫一條直線

? ? ? ? 這個例子只為了思路鍛煉,不必在意正確與否,或者和實際比較起來會走很多彎路

小結

? ? ? ? 程序自身模型,函數模型的演示,硬件標準如何實現的思路

? ? ? ? ?

????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/91928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/91928.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/91928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于JAVA Spring Boot物理實驗考核系統設計與實現 (文檔+源碼)

目錄 一.研究目的 二.需求分析 三.數據庫設計 四.系統頁面展示 五.源碼獲取方式 一.研究目的 信息數據的處理完全依賴人工進行操作&#xff0c;會耗費大量的人工成本&#xff0c;特別是面對大量的數據信息時&#xff0c;傳統人工操作不僅不能對數據的出錯率進行保證&…

【國內電子數據取證廠商龍信科技】安卓鏡像提取與解析

前言隨著智能手機更新迭代越來越快&#xff0c;手機廠家對手機系統安全性要求也越來越嚴格。系統安全性提高對公民的隱私是一件好事&#xff0c;但是對于取證行業確實一個大難題&#xff0c;手機系統安全性的提高意味著我們能對犯罪嫌疑人手機的提取數據和恢復數據越來越少&…

Java+Ollama 本地部署 DeepSeek-R1 對話機器人:從 0 到 1 實戰指南

作為 Java 開發者&#xff0c;想在本地搭建一個能理解代碼、支持多輪對話的 AI 機器人&#xff1f;DeepSeek-R1 這款開源大模型絕對值得一試。今天就帶大家用 OllamaJava 實現本地化部署&#xff0c;全程實操&#xff0c;新手也能跟著做&#xff01; 一、先搞懂&#xff1a;為…

Java Web項目Dump文件分析指南

目錄 1. Dump文件的類型與作用 2. 生成Dump文件的方法 3. 分析Dump文件的工具 4. 分析步驟與常見問題解決 5. 最佳實踐與預防 在Java Web項目中&#xff0c;dump文件是JVM&#xff08;Java虛擬機&#xff09;在發生崩潰、內存溢出或特定事件時生成的內存快照文件&#xff0…

Ubuntu網卡驅動無效,不能連接wifi上網

一、現象及臨時網絡準備 我的另一篇博客詳細介紹了前期準備工作&#xff1a; 知乎&#xff1a;Ubuntu網卡驅動無效&#xff0c;不能連接wifi上網知乎&#xff1a;Ubuntu網卡驅動無效&#xff0c;不能連接wifi上網 在此基礎上&#xff0c;還得給Ubuntu配好鏡像源&#xff0c;…

LeetCode Hot 100 二叉搜索樹中第 K 小的元素

給定一個二叉搜索樹的根節點 root &#xff0c;和一個整數 k &#xff0c;請你設計一個算法查找其中第 k 小的元素&#xff08;從 1 開始計數&#xff09;。示例 1&#xff1a;輸入&#xff1a;root [3,1,4,null,2], k 1 輸出&#xff1a;1示例 2&#xff1a;輸入&#xff1a…

5-大語言模型—理論基礎:注意力機制優化

目錄 1、稀疏注意力機制&#xff08;Sparse Attention&#xff09; 1.1、核心問題&#xff1a;傳統注意力的 “效率瓶頸” 1.2、具體稀疏策略&#xff08;詳細計算邏輯&#xff09; 1.2.1、局部窗口稀疏&#xff08;Local Window Sparse&#xff09; 1.2.2、基于內容的稀疏…

輕松學習C++:基本語法解析

基本語法解析引言基本語法變量和數據類型運算符控制結構函數示例代碼&#xff1a;計算圓的面積引言 C是一種功能強大的通用編程語言&#xff0c;由Bjarne Stroustrup于1979年創建。它在C語言的基礎上進行了擴展&#xff0c;支持面向對象編程、泛型編程和過程式編程。C以其高性…

Python Pandas讀取Excel表格中數據并根據時間字段篩選數據

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄Python Pandas讀取Excel表格中數據并根據時間…

CS231n-2017 Lecture3線性分類器、最優化筆記

圖片向量與標簽得分向量&#xff1a;上節講到&#xff0c;圖片可以被展開成一個向量&#xff0c;對于這個向量&#xff0c;假設它有D維&#xff0c;那么它就是D維空間的一個點&#xff0c;又假設我們的標簽集合總共有K種&#xff0c;我們可以定義一個K維標簽得分向量&#xff0…

windows wsl ubuntu 如何安裝 open-jdk8

安裝步驟 jdk dhd:~$ java -version Command java not found, but can be installed with: sudo apt install openjdk-11-jre-headless # version 11.0.20.11-0ubuntu1~22.04, or sudo apt install default-jre # version 2:1.11-72build2 sudo apt install op…

Javascript進程和線程通信

JavaScript 中的進程通信&#xff08;IPC&#xff09;和線程通信是實現高性能、高并發應用的核心技術&#xff0c;尤其在處理 CPU 密集型任務或跨環境數據交互時至關重要。以下從底層機制到應用場景的詳解&#xff1a;&#x1f9e9; ??一、進程通信&#xff08;Inter-Process…

堆堆堆,咕咕咕

1.找TopK問題要找到最前面的k個元素void swap(int *a,int *b) {int temp*a;*a*b;*btemp; } //向下調整最小堆 void minheapify(int arr[],int n,int index) {int left2*index1;int right2*index2;int smallestindex;if(left<n&&arr[left]<arr[smallest]) smalles…

n8n教程分享,從Github讀取.md文檔內容

從上一篇我們了解到了如何安裝 n8n 那么這節課我們嘗試從github的個人倉庫獲取某個文件的內容 目標如下 content/business/1.how-to-use-money.mdx 總流程圖 流程詳解 第1步&#xff1a;申請 GitHub Personal Access Token (Classic) 在gitrhub 個人 設置選項 申請 GitHub P…

分布式ID與冪等性面試題整理

分布式ID與冪等性面試題整理 文章目錄分布式ID與冪等性面試題整理一、分布式ID1. 為什么需要分布式ID&#xff1f;2. 分布式ID的核心要求3. 常見分布式ID方案(1) UUID(2) 數據庫自增(3) Redis自增(4) 雪花算法(Snowflake)(5) 美團Leaf/百度UidGenerator4. 雪花算法詳解二、冪等…

node.js學習筆記1

目錄 Node.js是什么 Node.js下載與安裝 Buffer緩沖區 一些計算機硬件基礎 程序運行的基本流程 Node.js是什么 node.js是一個JavaScript運行環境&#xff0c;或者說&#xff0c;node.js是一個可以運行JavaScript的軟件。 可以用于開發服務端、桌面端、工具類應用。 服務器…

游戲開發日志

我來為您逐行詳細講解這個 ViewMgr.cs 文件。這是一個Unity游戲中的視野管理系統&#xff0c;用于優化游戲性能。## 文件結構概覽這個文件主要包含以下幾個部分&#xff1a; 1. 數據結構和接口定義 2. 視野管理器 ViewMgr 類 3. 工具類 ViewTools讓我逐行為您講解&#xff1a;#…

使用 PlanetScope 衛星圖像繪制水質參數:以莫干湖為例

1.數據采集 我使用ArcGIS Pro 中的Planet Imagery插件下載了 2023 年 6 月 25 日的安卡拉莫干湖衛星圖像。 圖 1&#xff1a;使用 Planet 插件下載衛星圖像 圖 2&#xff1a;下載圖像的日期和傳感器選擇 我查閱的研究中指出&#xff0c;使用無降水時期的衛星圖像對于水質測定…

Docker部署前后端分離項目——多項目共享環境部署

目錄 一、簡介 二、文件目錄結構 三、前端部署流程&#xff08;多nginx&#xff09; 3.1 前端打包 3.2 編寫部署文件——項目1&#xff08;consult-system&#xff09; 3.3 編寫部署文件——項目2&#xff08;person-system&#xff09; 3.4 前端部署至linux服務器 3.5…

學習筆記(39):結合生活案例,介紹 10 種常見模型

學習筆記(39):結合生活案例&#xff0c;介紹 10 種常見模型線性回歸只是機器學習的 “冰山一角”&#xff01;根據不同的任務場景&#xff08;分類、回歸、聚類等&#xff09;&#xff0c;還有許多強大的模型可以選擇。下面我用最通俗易懂的語言&#xff0c;結合生活案例&#…