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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& s! @8 G6 `  U0 g
) P* v, X+ S/ B3 `9 S. @9 ^$ o3 B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, W+ }! T1 Q1 ]( ^! D
( y# ?9 J& }. w+ y
其他程序段。。。。。
$ G# _1 l. m+ b5 Y$ f: N! [, F ! D3 _: Y- j; R& b
   free(x_d);+ v! U. k5 r* e* s

  T; j3 e5 v% R4 z  j使用DSP侧单独调试功能,验证动态申请没有问题,
) V. d+ P% a( l. A3 T
4 e. }8 w: l5 `& {( k$ F但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 R& e9 G  b" k: p3 {
; n# I, O  @4 g  I0 p# Q, m+ ^

3 _& q' A7 _: q- g5 z1 W+ w; j4 s8 @) @* ], i* e
# K  T8 Y9 _0 w3 j. u

9 \$ ?7 F, P$ [$ h" w& D0 n2 g# E% @& g
2 U3 ^( V2 f% @% |9 a+ Z
' i- J5 `* X% r1 D8 h- Q& d; {# \
0 l7 J* p% Z/ ?8 o9 q
/ ~* N. x( L6 [$ z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 c: H% \  M0 F我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 r5 ?2 b3 b1 J0 U$ X' r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ O& t- ^) L' F3 p0 B& j( W' M
0 m' b2 c2 J2 E" p
是不是需要在DSP.CFG中进行配置1 T8 @4 o, g$ B. @% P. B6 _  _: a
我现在的配置为
( {! p; w" H( A
4 {; w8 O5 u+ P$ V/ K8 N+ ?/*0 @2 s3 e% ^# S  r$ h4 f! f
*  ======== Operating System Configuration ========- x* N5 Z1 H. w2 M/ e9 v& S
*/& M2 b6 M& |6 i* S  ]' ~
+ B; T. u3 X7 Q2 t' s9 k/ k
/* no rts heap */
7 Y. o% ?3 \! |* D3 E' N% ?Program.heap = 0;' }* {9 l; c- _9 e/ i% S/ Q
Program.argSize = 100;  /* minimum size */( _* h3 y) @' @  c
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 o, k) m/ T5 Z6 R8 i
7 R2 f" l* L" U# I3 y0 z+ J/* create a default heap */$ I7 I+ E$ T( \! x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  L7 c& n9 e' L% k; ^
var heapMemParams = new HeapMem.Params();
/ Z/ R; {& W2 c5 JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, i6 I6 K6 u6 M$ }9 [
! H9 b1 e- \! V- r! M$ L9 H  c2 p" J7 h
var Memory = xdc.useModule('xdc.runtime.Memory');  n# F6 O" e2 `! ^( d/ \$ n# [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, v  ~3 U' P$ X7 e9 J5 F2 q& ?+ c4 M
' S! O7 M9 o4 G& @( B% ~% o/* configure System module */
5 A/ |9 [5 Q8 U) t7 Yvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- X! i& N* j# OSysMin.bufSize = 0x1000;+ i& m  [  e3 ~
SysMin.flushAtExit = false;$ z  x( @0 z; w. f5 y, C" V

! }- s/ Z6 Z  ~1 nvar System = xdc.useModule('xdc.runtime.System');
$ E5 Q5 T. {$ M! W; V1 r* m5 s$ H% GSystem.SupportProxy = SysMin;
1 F3 |" f$ [7 d2 u; M/ H2 b& [# _+ l/ m
/* configure SysBios to use the lower half of Timer 1 */! \6 D* y& L: ~4 w* ^. n
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 k/ ~# _& T9 Y( W9 m$ }1 U1 e& V" A9 W
var Clock = xdc.useModule('ti.sysbios.knl.Clock');8 h( S# d3 ~- k( w8 X! U! I
Timer.timerSettings[1].master = true;
& S' K. R8 B$ `0 tTimer.defaultHalf = Timer.Half_LOWER;$ Z0 q- ^0 i( M5 j7 E
Clock.timerId = 1;8 x& ?+ I/ U6 W% b" [
0 F9 Z8 W5 l0 v: K0 @1 H

6 Q5 K0 J# H4 k5 p( k/*5 W3 X! Y4 {. p; T
*  ======== Miscellaneous Configuration ========( d& o4 a2 q$ d0 w2 y
*/
( b& [) A( W7 I7 k. B
4 a& d4 c- U, I4 K6 s% D& K* ~* z# u/* set default diags mask */
* \2 Z* r& ?$ z! f" S* |var Diags = xdc.useModule('xdc.runtime.Diags');
" F5 \* `- X' `0 zvar Defaults = xdc.useModule('xdc.runtime.Defaults');" y+ d4 [" L; m: z+ h5 s& {6 b
3 Q; s% `% C$ P9 Q
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& j! j5 n) T+ ?Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 `, d1 t1 g5 _
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 Q6 _( o3 j/ |2 C/ e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  Y$ M+ z! ?0 d+ c4 a0 y, N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( K0 ]! _* N4 k% B! Z" c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: K1 p. v, L# d' F' ~
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( h: E/ V/ g" T  O9 bDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# f& _/ U! G3 ?# T+ H; y% g; ]. cDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 t" v1 r' a) I, RDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
5 o1 V7 Z$ [9 p6 LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ F+ i4 u3 m; b9 b7 p5 RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 N) Z- O2 w5 Q* P6 @
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% y; C  f, L8 J1 fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 X" x) J# p( B- k! U) G5 ?
" _: m1 [$ y7 N8 b* e/* override diags mask for selected modules */" E' _( n/ z& ^# ^1 p. g! u
xdc.useModule('xdc.runtime.Main');
0 S2 J5 W9 w. L0 T  y6 y! mDiags.setMaskMeta(
; m/ T' C3 @% f, D  h) x4 r    "xdc.runtime.Main",
; s. F$ m/ J& f" ?1 a+ n  x3 x9 `    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 e4 F: O/ J4 ?- W; w* Q1 y; W* F% m    Diags.RUNTIME_ON  v+ C4 V" U6 z0 x. B9 x6 |, n
);
! M4 R- v- t; \& X9 {# z7 Q' r5 {- g4 e
var Registry = xdc.useModule('xdc.runtime.Registry');. l5 L# Z6 f: ?5 A0 d+ e, m6 K4 q9 x
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 ~! A* Q- w9 |" jRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" `7 |$ A! }  k: G6 B
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 L+ `( j, G9 |9 U. {7 t' @: YRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' m7 C* q3 \- P8 n* S  w

: V9 _, u( u: e! ^/* create a logger instance */! i8 k4 I' N3 i: ?3 B3 m3 R. a
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');7 L. R; H4 G6 T( e. t: I' [
var loggerBufP = new LoggerBuf.Params();
2 y7 O5 X3 e' W* H1 yloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' k: {' Q8 v% V5 D! q. ~loggerBufP.bufType = LoggerBuf.BufType_FIXED;$ i4 i& R' W4 \" a! |

. ]& L( j* W- k2 F- {; ]. ^var appLogger = LoggerBuf.create(loggerBufP);
# u3 X9 D% q, o( n8 xappLogger.instance.name = "AppLog_Core1";8 h9 L1 Y+ R+ T3 A
Defaults.common$.logger = appLogger;: u8 L' b! [! r. Z! O* m
Memory.defaultHeapSize = 0x8192;    8 C! V( N, O  l6 h1 [5 ^# Q& N
Idle.idleFxns[0] = "&LEDStatus";5 E$ b5 D: u3 d0 H% k6 n, T
Cache.initSize.l2Size = Cache.L2Size_32K;% j  @5 t2 C. K3 A# I

( V, v7 `3 p0 J# {) }" V
回复 支持 反对

使用道具 举报

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 */
& Q' l9 R+ u/ {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ @( O9 c; `; B3 P: Wvar heapMemParams = new HeapMem.Params();" Q9 k! C. G. k* w* s  @, C1 ?5 S
heapMemParams.size = 0x4000;8 }6 N) M5 R. R& k

/ I1 {) T" U0 D: w) Uvar Memory = xdc.useModule('xdc.runtime.Memory');
# V4 _, t( u% F2 X, K4 K9 [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( a: U" N$ @$ q  `2 `" J. j/ f% A
" [; B4 m1 `7 O# q+ z( E0 y/ r& g% v我大约calloc  每次共计大小为5K*16bits,
1 p3 j4 b  `6 u) f( Q) \( E& z而默认配置才0x4000、需要改大。6 L5 z, K) D: M9 r6 G) a9 T

6 o6 Q- v0 v- N. c( I+ d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* J8 ]" A& ]7 ?' \2 PProgram.heap = 0;
8 Z3 ^  R6 n( H$ ?" z, V, O9 }Program.argSize = 100;  /* minimum size */$ q0 n9 \& }1 [8 b* X2 o# u" E% T
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-12 16:04 , Processed in 0.048559 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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