关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7697|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ ]% O7 J6 d$ p" r) A
+ P* J2 I6 I5 u- H
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! q0 ]. A# z2 W  z" u' F: Q$ w* v: T3 H0 k, y- i4 u3 }
其他程序段。。。。。
/ [1 e$ P& V+ N3 f  n; g
9 H& h# a9 g7 x! d3 a   free(x_d);
$ ]1 i# W* d/ M. Y/ ~
4 g7 O8 q9 x) n4 b使用DSP侧单独调试功能,验证动态申请没有问题,8 u2 J' L) H; ]3 m1 T4 M

) [* {0 t2 v# p, g5 f, g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- d# x  v% y) Y5 ^" }" H( K8 v

+ E  v  _/ j( r( Q5 E8 _  U& m. u* m6 U+ d; B3 X( L* k& {8 `

' m8 k+ r9 t% ?/ _% G, ]/ b
4 {4 u1 m' I* h  C6 t( \0 Y' s8 N" p& U4 T
- N' O* y6 i- }5 f% P

9 G+ w7 m3 W, n9 f; B1 t0 R2 W
! d' F! I+ ]+ F+ D' u" {* T3 e2 w/ l8 G- U: i: @) I
) c. T7 }2 e2 W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 V! J8 r% S0 L1 r% F3 N2 o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& d* Z: z4 G1 A" X# \2 P(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 o& B( M( `! }. ~. A' @4 ?

# u) W1 c9 v3 J5 s是不是需要在DSP.CFG中进行配置
/ s0 L4 h# S4 }9 T& X我现在的配置为
0 @5 z1 ?8 X3 H& Y9 q5 B* V
! A0 q/ q- f" q, U: T7 e! i; r$ N. t; l/*; F2 L: T/ F! q. S* _/ G
*  ======== Operating System Configuration ========* M5 l6 F' u. o2 C4 I) H% R
*// m5 b, o7 }; H  P* L  Z

, ^1 w7 d, k$ s6 `, g& t$ O/* no rts heap */
& l0 @7 u  M& K( T" A6 j0 AProgram.heap = 0;3 T/ [- W8 |$ k
Program.argSize = 100;  /* minimum size */. Z) ~" i* i& F4 a5 n
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 [0 E: j5 T6 P

4 c- B! U+ Y+ m; c. D9 W: Z* }/* create a default heap */
7 e4 v* q+ y% Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 R: b1 z5 Q9 }( {  jvar heapMemParams = new HeapMem.Params();
' O3 ^, {  y  H2 {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# p/ C6 H( e+ `( ~! D' j7 M4 }  z( y- k- `# r& h+ C4 H# q" W
var Memory = xdc.useModule('xdc.runtime.Memory');
9 x" }; D9 {5 n# E" @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 [) K, Z# n" _) ^3 m+ j8 m. F

3 h+ |; P* C3 V$ g& ~/* configure System module */
  P& Z& U' e+ e% uvar SysMin = xdc.useModule('xdc.runtime.SysMin');
' C. M2 B" v1 @$ h) fSysMin.bufSize = 0x1000;
" p2 u9 V& Q8 ^1 ^SysMin.flushAtExit = false;
$ D" K1 ]0 h: v  q& \, F9 V
# |5 q( E+ Z0 l8 F0 @9 cvar System = xdc.useModule('xdc.runtime.System');
2 g3 D4 a$ K# eSystem.SupportProxy = SysMin;
  G, }7 m. k! W5 S0 Y, a
* h! S  a  t  g2 V% h+ ^6 O/* configure SysBios to use the lower half of Timer 1 */5 m: X/ t8 G. X6 v, E, o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# D, |- i/ u; c. [4 z1 fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');- T# c# M" c- U$ n, ?" j, @
Timer.timerSettings[1].master = true;1 j& r2 T& y) T( M! N
Timer.defaultHalf = Timer.Half_LOWER;
. i3 j% I; Q, Z6 G; ?Clock.timerId = 1;
; L/ e. J+ _: O( s1 d( C* h" q* y/ X& s  [4 u8 R. g

6 l/ ?- g# ?. o/*
2 i) m0 @- [' i% O8 E *  ======== Miscellaneous Configuration ========; A9 e, f' ]  v0 D+ [/ o( Q
*/
( q3 a9 [% S/ u. K( C# X  o
0 K7 S& }; a5 d4 t  J# P/* set default diags mask */, D9 v8 U/ @! x# `" H9 J
var Diags = xdc.useModule('xdc.runtime.Diags');
/ H7 K6 F( t% [0 Z/ Q% {var Defaults = xdc.useModule('xdc.runtime.Defaults');
: L4 c- h) l+ O/ P5 G) S9 l
- Y9 Z8 r5 @% _$ Y3 q. Y1 ADefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 v/ U7 t0 G* P' y4 K8 f- x6 L5 a3 D
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! N/ d: b7 ]- k& u1 R& T1 pDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 F/ i8 g1 q& p$ v7 H( A0 g
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */! d& T( |& S  ~, O- d
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 v" ]1 q5 {% c. }5 p% E8 V
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" A5 r* d0 g2 SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' I' b0 T2 |- x5 s2 cDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 Z" U0 ?) w; i! N* k' x" _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! |$ p3 P6 |! A6 S4 T+ Y
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ P% {3 ?/ g, f" n" J; L, GDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" w' W6 A& A' y  X
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% }. s1 C# f9 O4 SDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" @& U1 B) c% h( S( q( \" p' W
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 s6 g" V9 H9 Y, }
3 A  b$ `0 O! n! _! A8 L& s/* override diags mask for selected modules */
4 t, C) g  M' |4 Y; L% hxdc.useModule('xdc.runtime.Main');
  w3 G9 k& K& j: c/ E$ B* `Diags.setMaskMeta(, h+ B8 Q3 l- S4 j0 S) D0 s
    "xdc.runtime.Main",9 b: l& S+ x2 e4 ?- @! Z8 w0 o
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ V, `4 u; z  h  v- r
    Diags.RUNTIME_ON
* m- a; j6 O( W  u  S5 c);7 A! J6 G) T- J& V& Q6 W

, I8 {' _# e7 v9 R, f% |var Registry = xdc.useModule('xdc.runtime.Registry');1 F2 z! M7 L+ [; p( s2 @
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 N; y( q: v4 w
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* H# E) v1 @( w2 _+ h' ]4 fRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;; `3 z5 g# |- M
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  f  b- i- p; Q$ d
$ H8 o: K/ w$ t4 e: J5 i4 Z/* create a logger instance */+ S( H! w" W8 ~* Y1 L. z3 @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! |0 Q. V3 y* T6 Ovar loggerBufP = new LoggerBuf.Params();
/ M! D# D" V% e$ ]6 E: kloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, ^1 Z: i! u- t* h# @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;) J# B! `, E: L8 b, ~, d0 R

0 V8 z9 b9 G: u5 Svar appLogger = LoggerBuf.create(loggerBufP);+ ]) ~: K0 M( ]9 y6 u; K, L
appLogger.instance.name = "AppLog_Core1";1 c% e. ]& W9 F8 A! B* e; H
Defaults.common$.logger = appLogger;0 V% z, j5 e* P, q; U
Memory.defaultHeapSize = 0x8192;    : a. s, }  _/ j. h
Idle.idleFxns[0] = "&LEDStatus";
3 s9 @& P/ \# \- ?/ `# TCache.initSize.l2Size = Cache.L2Size_32K;
& C1 C! W; K/ X5 G3 k6 y
0 U. e/ Z5 k+ v2 p3 z. C% S
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap *// _- V1 i' w' U; S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. s6 `; T# ^* X( D* u) K* W
var heapMemParams = new HeapMem.Params();
7 {$ P  q6 O$ UheapMemParams.size = 0x4000;
/ _) x" R' K1 I8 g5 c3 r- G0 j9 }5 B( H) n/ I
var Memory = xdc.useModule('xdc.runtime.Memory');
# r- K, U% Z( v5 v- AMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  j7 S: @, D( @' [6 }, P) {  L- l( |" y; ~1 P, [8 a1 {/ n
我大约calloc  每次共计大小为5K*16bits,# [8 G  Q! K6 n( @
而默认配置才0x4000、需要改大。
) F* I; f: ?+ f5 h: j8 p8 N* X" v- I* j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 R) `; R  V+ h6 ~" k
Program.heap = 0;
$ {( d% u8 q& O8 a* LProgram.argSize = 100;  /* minimum size */" d4 t) f; h9 t; Y9 s  w  x
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-16 13:33 , Processed in 0.047746 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表