当前位置:网站首页>2837xd 代碼生成——補充(1)
2837xd 代碼生成——補充(1)
2022-07-02 09:41:00 【Quikk】
2837xd 代碼生成——補充(1)
1 代碼生成補充
GPIODATA讀取,需要利用Memory Copy模塊:
在TI官方手册中,GPIO被分為A-F六組,每組對應關系分別如下:
端口 | 管脚 | 備注 |
---|---|---|
PortA | GPIO0 ---- GPIO31 | |
PortB | GPIO32---- GPIO63 | |
PortC | GPIO64 ---- GPIO95 | |
PortD | GPIO96 ---- GPIO127 | |
PortE | GPIO128 ---- GPIO159 | |
PortF | GPIO160 ---- GPIO168 |
因為在Simulink官方沒有提供讀取管脚DATA接口,又沒有TI官方的結構體操作方式。所以只能采用訪問寄存器的方式進行讀取,例如要訪問GPIO23的數據,先查看GPIO23屬於PortA,所以應該訪問GpioDataRegs.GPADAT.all寄存器。因此利用Memory Copy模塊進行訪問相應地址:
對於判斷數據可以使用Bitwise模塊進行運算。比如下圖實現的就是檢測GPIO23數據為0時,觸發子模塊。Bitwise的掩碼代錶著查看哪一比特,如下圖,代錶關心第23比特(GPIO23)。若第23比特為零則輸出0,若為1則輸出0x800000。
2 Matlab-Coder代碼生成
首先編寫好一個m_functiong的代碼:
然後進入Matlab Coder APP:
然後選擇剛剛寫好的m脚本文件:
直接點擊Next:
然後定義輸入端口(數據類型):
選擇脚本進行測試生成MEX文件可以方便進行驗證代碼生成的效果:
進入更多設置:
設置為TIc2000系列的代碼:
然後生成代碼即可:
下面將生成的代碼加入工程進行應用:
在上述的代碼生成中,可以看到有mian文件。那是matlab給定的使用例子。可以按照上述的進行使用。進入生成代碼目錄,這裏要主要h文件的包含,不行就先加入my_func的c文件和h文件。編譯之後,提示缺啥就加入啥。
這裏講述一些文件包含關系,我生成的代碼中,my_func.h需要頭文件my_func_types.h與rtwtypes.h。rtwtypes.h裏面存儲了一些有關的宏定義文件。所以我在代碼生成目錄複制四個文件到工程中即可:
這裏使用CodeBlocks進行驗證能够運行:
結果符合m代碼功能:
3 Simulink Function代碼生成
因為計算機系統都是離散控制系統,所以必須使用離散模塊進行代碼生成,這裏以一個簡單的實例進行描述:
建立如下一個PI的離散模型,輸入與輸出用端口代替(生成代碼裏面就是將參數傳遞進來):
設置仿真步長和求解器方法:
對硬件進行相應的設置,這裏不同的處理器,可能支持的操作比特數不同:
對Code Generation選項卡進行相關設置,系統中安裝了任意版本VS可以不勾選 Generate code only。沒有安裝必須勾選:
那個生成tlc文件的原理還沒有弄很明白,類似脚本語言,調用資源進行編譯什麼的。所以暫時用官方提供的,有能力了再自己編寫。
Report選項卡:
Comments選項卡都是一些與注釋相關的內容,進行設置可以增加程序可讀性(這裏采用默認設置):
Code Placement選項卡選擇Compact(緊凑型):
然後應用後,退出到Simulink界面(2019以下的版本在Interface中有個Configure Model Function進行相關設置),2019以上版本將此功能獨立出來了(下面是2019版本設置過程):
1)進入Embeded Coder進行設置
2)點擊左下角進行編輯函數生成,這裏有三個函數初始化、步進運算、終止函數,主要設置step函數(另外兩個自行設置):
3)step函數設置(設置完畢點擊驗證,驗證成功後,Ctrl+B 生成代碼即可):
4)在生成的代碼中,可以看到step函數:
其名字,形參都是在Simulink中進行設置的參數。但是這裏僅僅是函數的生成,還需要0.01秒調用一次即可使用。將相應的頭文件和源文件加入工程即可調用函數:
4 模型的快速測試
Simulink工作空間與Workspace相互聯系,所以在快速測試模型的時候,可以通過m脚本進行仿真。其主要過程如下:
clear;
clc;
step_size=0.01; //仿真步長設置
time=0.5; //仿真時間設置
t=[0:step_size:time]';
u(:,1)=[ones(2,1);zeros(length(t)-2,1)]; //給定數組,t為Simulink仿真時間點,u為輸入
simout=sim(gcs,'SolverType','Fixed-step','Solver','ode3',...
'FixedStep',num2str(step_size),'Stoptime',num2str(time),...
'LoadExternalInput','on'); // 對Simulik的Configuration Parameters進行設置
stairs(simout.tout,simout.yout{
1}.Values.Data); //繪制結果圖
可以看出脚本其實是實現了,開啟外部輸入功能的指令以及設置了步長運行時間等相關的參數:
但是脚本測試與實際測試最大的區別就是:他不會更改模型的任何設置。還能快速的給定不同輸入和運行以及繪制結果。
當然這裏只是簡單的應用,具體simout函數的參數以及其他用法需要參照幫助文檔。
边栏推荐
- c语言编程题
- Don't look for it. All the necessary plug-ins for Chrome browser are here
- 逆变器simulink模型——处理器在环测试(PIL)
- 保存视频 opencv::VideoWriter
- BugkuCTF-web16(备份是个好习惯)
- Bugkuctf-web24 (problem solving ideas and steps)
- Ckeditor 4.10.1 upload pictures to prompt "incorrect server response" problem solution
- tinyxml2 读取和修改文件
- FragmentTabHost实现房贷计算器界面
- Navicat 远程连接Mysql报错1045 - Access denied for user ‘root‘@‘222.173.220.236‘ (using password: YES)
猜你喜欢
Kinect DK obtains color RGB images in cv:: mat format (used in openpose)
Activity的创建和跳转
图像识别-数据增广
Share a blog (water blog)
MySQL事务
Timed thread pool implements request merging
zk配置中心---Config Toolkit配置与使用
JDBC回顾
Off grid control of three-phase inverter - PR control
Inverter Simulink model -- processor in the loop test (PIL)
随机推荐
Read Day5 30 minutes before going to bed every day_ All key values in the map, how to obtain all value values
Web security and defense
Mysql 多列IN操作
企业级SaaS CRM实现
大学生四六级作文模板(自创版,成功跨过六级)
每天睡觉前30分钟阅读_day4_Files
Safety production early warning system software - Download safety production app software
分享一篇博客(水一篇博客)
BugkuCTF-web24(解题思路及步骤)
Machine learning practice: is Mermaid a love movie or an action movie? KNN announces the answer
YOLO物体识别,生成数据用到的工具
C语言之数据插入
QT信号槽总结-connect函数错误用法
Supplier selection and prequalification of Oracle project management system
Pool de connexion redis personnalisé
Image recognition - Data Cleaning
Knife4j 2. Solution to the problem of file control without selection when uploading x version files
C语言之做木桶
tinyxml2 读取和修改文件
Statistical learning methods - Chapter 5, decision tree model and learning (Part 1)