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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, E2 o! E; J6 D' m  P" c
" P. W3 a) d9 U5 ?- h$ M" o- V    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256: S: _% u$ c) U- Q0 ^
6 H5 m$ L1 ]( Z! i8 w
其他程序段。。。。。
: J# \& j! z! z  c6 p9 m" D : l# x6 C$ O: J& ~8 X! g8 ]; h
   free(x_d);2 D# l2 C$ N" _& y

1 P0 L+ \4 r: Z, N9 O8 n$ Q+ E使用DSP侧单独调试功能,验证动态申请没有问题,: U& ], i0 t& T" z) g; w6 U4 r8 A
5 m6 d  A$ y9 E3 s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 d$ P8 x' }2 I; U0 c' n; Q
. G  o1 ]! E& c( S3 W

8 s' @0 U& m, b9 I0 l8 L# ~0 o8 Y* A2 g/ {$ O; |) B$ I* K

1 |" l* R  X$ B. A) n1 a) P
" o" n& A* B: ?, M* v7 W: Z
& [0 u, ~) P3 T/ }; t8 g( R
2 L3 c0 h( T' |8 [$ N- J: b
& Z$ N& y3 N. X8 v" m1 |: z. w/ ]2 p- Y

2 l& w( ^. y+ b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; A0 P0 s7 A3 F% z/ B我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' ]' K. d0 R# ], b8 f(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- Y0 S6 }* A+ Z2 X% \& s" k
" u/ }! A" y; }
是不是需要在DSP.CFG中进行配置
+ a; a) `7 ?/ {/ b/ G, L我现在的配置为
# Y2 k+ d2 [6 C+ ^9 V7 }6 v$ K0 E/ Z6 F5 E$ I. S
/*
- P/ p8 h, l9 r) n$ Z! }: N9 Q  F *  ======== Operating System Configuration ========0 o* c. ^/ X$ t& ?1 s7 ~9 y
*/1 A  |4 W1 [  E

5 U' }1 ~4 h1 C, @5 V/* no rts heap */: \  j2 K' j  L0 G$ A( L
Program.heap = 0;
) [+ `) b# V2 X2 y6 k- HProgram.argSize = 100;  /* minimum size */
7 c) G) H; E  O9 tProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* {: T$ l+ `4 G% k
# s* a  B$ n, m
/* create a default heap */
5 U; q  e& x, t; N  q* @# `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# D* `( K- C  y9 b1 [
var heapMemParams = new HeapMem.Params();. Q8 \/ G) B5 {9 a  p& X
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! j9 e0 O6 \) {- }% V' W2 Q
8 G! r, v* ~" ^4 n/ C' E
var Memory = xdc.useModule('xdc.runtime.Memory');: |6 q$ `* s8 C  Q% n* u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 b/ I, Z' A1 J/ r  h. \  N1 M
( b0 C- N9 A6 x$ e2 K- A* w* Z/* configure System module */
% {* {6 G" x# a- u+ r- kvar SysMin = xdc.useModule('xdc.runtime.SysMin');
; {; K, O  h: v+ B4 VSysMin.bufSize = 0x1000;* D$ {" ^9 W7 o# K8 P' l
SysMin.flushAtExit = false;! }2 h) C# J: O0 ?! e
! a/ r# W5 Q% M
var System = xdc.useModule('xdc.runtime.System');# D' ^, f0 P! o; d" [
System.SupportProxy = SysMin;5 }3 X, Q( l+ m6 ?0 Z& ?$ k

/ z4 X8 F& w0 Z: ~8 ~% R' o/* configure SysBios to use the lower half of Timer 1 */
8 ^: O4 H: U7 ~! l) p  Z) `) ]& Yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ B6 g. C' w  c4 B# dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
& w, B5 V' A6 {Timer.timerSettings[1].master = true;) S6 f, J7 ~* w/ U; w: f/ P( H' J; j
Timer.defaultHalf = Timer.Half_LOWER;3 s6 p1 I# t/ s3 o) _& n7 {6 [# @3 v% U  l
Clock.timerId = 1;
- ]& G- `) A+ y3 F
* ^: d5 m6 Z: G- Z2 J7 a4 ^% f2 }5 |: e; y# K3 B0 t
/*) d2 I" l  M  `# ?/ ?$ O8 B
*  ======== Miscellaneous Configuration ========) k1 x/ S+ j# M% V; S% Q
*/
; D8 w1 Y5 E$ l3 U; B0 Y4 _; @" d: I
# S) i( x& j! ?$ L& b6 c5 W/* set default diags mask */
2 M! U+ p. N- a% uvar Diags = xdc.useModule('xdc.runtime.Diags');" l$ h" h+ |$ y4 q! @7 l. N
var Defaults = xdc.useModule('xdc.runtime.Defaults');3 z/ [8 J. e# \

) i( y1 n7 a9 D. ODefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ \5 q/ _0 ~3 c  Q# V; @- U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 B( r0 w0 P4 N1 G8 Q2 a/ q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
& i9 P* Z* |: e% n' v2 dDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' X! M) W, ?; a
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( f1 j+ h6 h7 p& e, I% O
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ i0 y2 J- `* I, u: d7 V+ m, d$ I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  z" q, t7 _; A5 |' B7 sDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 w; o9 w9 I2 A6 m  `/ Y2 kDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 p+ |5 V7 ^6 M# V" k/ O: {" t2 iDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* V5 h* z; n7 Q  V) I: V. L* Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 T- p: Y: ^* {" ~5 s% X6 u' MDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. R8 Q. {9 g3 L4 {' t0 g5 N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- h$ L" E  }1 j7 T* ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% C1 M. |5 q" E; U7 R

& z  w0 j$ Q6 w3 s9 m/* override diags mask for selected modules */1 o2 ~  A% }6 h$ c9 j+ ^5 ]& F
xdc.useModule('xdc.runtime.Main');4 k% ?/ r, W3 P6 r, P) C6 u
Diags.setMaskMeta(
0 j0 o7 |. g7 E! L9 Y' f  ?    "xdc.runtime.Main",' Z8 h/ D9 R4 n5 o5 P8 `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( c; h. o4 f5 M! c4 q% G/ J# z; M* J
    Diags.RUNTIME_ON
% b. H! J$ j! N/ E' o);. E8 l+ t- d1 I6 f. S" r# ~

' S  y  J! Z$ o/ h; y  [var Registry = xdc.useModule('xdc.runtime.Registry');: ^5 j7 L+ [( k7 }* t% g- f' C
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# h+ G& F$ X/ DRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  |* q/ d6 A6 Y  F8 S
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 |( \+ o+ G4 v3 a# F
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ g7 {. r3 R. V
. L9 b" \, r( M  G' I/* create a logger instance */
, W& U! b& l0 C1 Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* }* G  s. |% u1 }% F2 {4 [) b9 H
var loggerBufP = new LoggerBuf.Params();5 q4 }  D3 i8 S
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" [7 Z6 d/ Z. h/ E) E3 Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 w! T! C, N0 w2 w

+ i; ?0 @/ F; V& N: yvar appLogger = LoggerBuf.create(loggerBufP);
- T! Z! a( l$ e& vappLogger.instance.name = "AppLog_Core1";
7 u) t  e4 T" P% V9 [9 UDefaults.common$.logger = appLogger;* M, u, `: x; h! Z0 p. _3 B3 Z
Memory.defaultHeapSize = 0x8192;    1 @* A+ |& u# `
Idle.idleFxns[0] = "&LEDStatus";2 e/ m9 O+ x: A; k3 [
Cache.initSize.l2Size = Cache.L2Size_32K;
* N1 p2 }5 _. H
: p4 h+ [) B3 m- s0 P
回复 支持 反对

使用道具 举报

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 */
. W- s8 `1 x& Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 b% b- c7 V5 J7 |$ x7 s* gvar heapMemParams = new HeapMem.Params();
! _; Q4 w6 Z* U% OheapMemParams.size = 0x4000;5 k/ \7 r' E. P+ Q, c
- Y9 ?0 H. s9 X. @7 e; |0 P
var Memory = xdc.useModule('xdc.runtime.Memory');
' w8 F9 K0 ]6 z0 W" X! I  [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) O0 l! T8 v' j0 M

( U+ E7 S+ T' a1 P我大约calloc  每次共计大小为5K*16bits,
9 m! G6 j( ~6 ^1 B9 v6 G& U# C而默认配置才0x4000、需要改大。- a) \9 ?6 C8 V: x7 S

3 G: d; L# v: }9 ]- I
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' g8 l( `# ^# v; k
Program.heap = 0;. L/ ]/ o$ S, y$ D) X6 Q, w
Program.argSize = 100;  /* minimum size */% ]0 i/ w3 Z) H' [2 o1 o& @( n: V
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-1 05:50 , Processed in 0.041136 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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