关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 c) e) K  `, ?& U

5 {& y, j7 \# p6 p) H/ @    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% {5 n; _4 Z* |, I; {' ?  x- p5 u+ k( D

5 S. y; I: ]: u其他程序段。。。。。% ~- t& B5 W2 V5 l" B- D1 n* Q

$ o, u) P" Q3 o   free(x_d);' Q* Z; X7 k- I: H$ a

; y1 {. i4 q* a+ H* o7 b( B. W6 Q使用DSP侧单独调试功能,验证动态申请没有问题,
# j$ p  J! ]' i: \4 ]  V+ e) x" a! B1 C+ k  W  t, v0 b9 z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) B% b/ G3 y2 R" \: f: K8 u
$ T) T/ B/ x2 f9 V& s

- L6 {% r3 l0 ^4 }6 _
  ]) I" s) }7 v9 K5 S" G5 g/ x1 [) U! g+ ~$ h. G/ v/ V, i- X" T; u- p/ R
4 {9 R2 {) Y/ V8 M# T2 ?/ `
/ V. Y# @3 _+ x! {

2 Z3 Y4 X1 o9 n& T& B$ z0 P3 Y0 X, X7 a/ L0 F* x

, W4 [6 |4 D" y, h' }1 Y4 u- F0 [7 u. `9 `/ V( V" I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- p  q5 E; Y0 l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 G2 ]( L% x7 k
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); W' v; Q$ o) a( W4 W0 |4 L

: d: }  U# k( s是不是需要在DSP.CFG中进行配置! h+ @% |. r7 r, W3 @( {! _
我现在的配置为
6 m5 V# S3 l) O) g  |* ]% P3 [' ~3 l% U! \4 @: Q
/*' r4 U7 @4 s, ]; U. W: b4 s" D
*  ======== Operating System Configuration ========( Z" Z) a6 k4 n4 a% |5 I
*/) Z, `% y' \; S2 k# ~

3 W& z+ f) {% F! I/* no rts heap */$ A6 k- I* H: B& u. g" W6 I  c5 x
Program.heap = 0;4 Z: [( ~/ r( v: j1 @( R- _
Program.argSize = 100;  /* minimum size */. N% h# J. k  {1 Z$ y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  R9 S+ A- ~3 C+ f4 U3 v0 |4 w7 c. ~; O+ d5 ]
/* create a default heap */
5 s1 L7 J4 w6 I' m, l! Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* m" c# [' |* H/ d
var heapMemParams = new HeapMem.Params();
3 r1 x; H2 l- v9 ~1 pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  m' Q2 k) L2 p
/ y4 `+ I, e1 O4 v9 r
var Memory = xdc.useModule('xdc.runtime.Memory');1 f' f6 p5 c, }; [* R' D& ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% D# {( q  s+ j+ B! O4 ~. W9 e
- p+ }  ^2 A$ v* E, s' e4 S/* configure System module */! K* I1 @% u* a2 m: _
var SysMin = xdc.useModule('xdc.runtime.SysMin');* q  k, q, x  F) s, H/ K
SysMin.bufSize = 0x1000;
' Q, ]! ~1 |  {9 b% n8 W, cSysMin.flushAtExit = false;: A0 a6 R, b* o! ^3 z3 D
, W. ?9 A! v/ A5 G
var System = xdc.useModule('xdc.runtime.System');; e1 e+ _6 V' z# m
System.SupportProxy = SysMin;
; t0 M* K' \+ n" H& S. X) |5 p7 K  |/ s$ s5 Z+ t# X
/* configure SysBios to use the lower half of Timer 1 */1 [+ |/ l. ^# M
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ i" c8 ^2 c1 ~) l8 Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* _3 r6 Y2 g" {) R7 M$ A) ?6 n
Timer.timerSettings[1].master = true;" P9 ?3 \5 e6 `/ H; ?& q3 f& u4 V1 ^- u& H
Timer.defaultHalf = Timer.Half_LOWER;9 m3 g1 V( t/ ^; N5 J. l3 I8 F5 E
Clock.timerId = 1;3 A) d* g# F( a. m  l2 A

  a. }! t( Y/ B) M9 C, E3 b/ t% ]1 Z3 V' {/ k* r& R7 F% ~( @
/*
* C6 U! o! a/ m- P" \6 z *  ======== Miscellaneous Configuration ========2 y7 h7 G! q; q' P) i! `8 t
*/
+ ^1 `: C/ }2 T0 l  _9 V3 C
9 J4 G' d3 A6 s% p/* set default diags mask */
- W. B6 O* y0 Q+ v  Pvar Diags = xdc.useModule('xdc.runtime.Diags');
1 D' B1 v& D2 [var Defaults = xdc.useModule('xdc.runtime.Defaults');" ?) s  [1 Q* a2 m: D4 Z/ I4 m
- q' ^$ S% }3 w4 ]! H  T' I
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: @! D& k) P8 Q6 N" \
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 ^/ c9 V' ]6 [3 D8 O9 W" M
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: s$ i/ W' Q) v6 _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 j* ^9 q1 M- B! b% ?$ b& a/ O
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; b! w' m) y: R$ i! F# T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ S$ Z6 k4 {* W: G4 yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 z1 F0 m* n6 SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 {1 t2 F, }' l; P7 _( Z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 o7 O* l, s4 W8 n; xDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ i6 H: s/ G0 i6 a& \0 f& u: fDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) h; \4 \" \5 w5 V5 n+ k! q" iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; ^! ?" F/ C2 c5 i: C, {7 I
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 p# j  N/ q% D1 w( v5 n
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" K- ~% L7 k8 ?- V! l& P3 B- ~- c$ y) O* G( p6 d
/* override diags mask for selected modules */( D7 m) @- @3 G' {& D
xdc.useModule('xdc.runtime.Main');
7 Z% k6 X( a6 T+ J3 rDiags.setMaskMeta(* c. @# w9 L" h$ D* E; T
    "xdc.runtime.Main",7 u+ o$ g3 R6 T. q# ?
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
3 D4 A0 D: n' X+ c& f    Diags.RUNTIME_ON! i- R7 v0 h/ C. D* d! K
);/ ~9 n; V) d, J8 w; X# _
) p: e' [2 }# ?+ K1 L; h0 w$ I& F
var Registry = xdc.useModule('xdc.runtime.Registry');1 q: J/ ~  Z# b" _; B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 z: u4 }( M, c8 pRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 q' ~8 l/ B/ t3 `. F4 h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 Y& l8 f% [9 y+ kRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;, V  @* V+ d( t4 n+ F
* S, l- L$ G' i& R& W: R+ Q: f4 _
/* create a logger instance */
/ @% \& u( _; T/ L% }7 L' Q1 h  Dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) B- y1 y* O" }: o) L
var loggerBufP = new LoggerBuf.Params();/ K0 n: k+ W4 x, i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 x# |5 h4 C" dloggerBufP.bufType = LoggerBuf.BufType_FIXED;
" ]+ r/ J" F4 R( Y) R9 U; I2 s0 J( ~
var appLogger = LoggerBuf.create(loggerBufP);
6 v8 `) ^+ a6 l- F) ZappLogger.instance.name = "AppLog_Core1";& t: v" G* e/ B) H- \3 l, r
Defaults.common$.logger = appLogger;
7 `- T% g- I% }& ~; RMemory.defaultHeapSize = 0x8192;    3 I9 s. N- r; i
Idle.idleFxns[0] = "&LEDStatus";* ]2 [: L7 N: g# G5 b, |/ ~: f
Cache.initSize.l2Size = Cache.L2Size_32K;- ?9 {" {: j# [4 p9 y7 W
6 W7 B# ~: Q+ C, C  G4 o8 S" E. I
回复 支持 反对

使用道具 举报

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 */+ u8 B8 Y, H3 s+ W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# a5 ^9 ?8 x" P: b$ o! ]( Z6 cvar heapMemParams = new HeapMem.Params();2 t0 _$ p0 g  v) ^( q7 E7 B
heapMemParams.size = 0x4000;( |! K' ^1 x) V; P) ]6 p( i6 \" X4 `
* \) }. i; ~3 R/ [9 O4 X5 n1 O
var Memory = xdc.useModule('xdc.runtime.Memory');
3 p7 Y6 q) A$ {% x' T5 o, N; CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 c9 U# I0 g( n
+ c6 Q; H& K% g. X& X3 M
我大约calloc  每次共计大小为5K*16bits,8 B! p2 B. u- Q5 u# ~# g8 o
而默认配置才0x4000、需要改大。# t  j" e3 s9 A

& z  |4 r5 Z  f5 }) v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: W' O5 Y. G5 L) O, s9 b
Program.heap = 0;
# g) j2 v3 x( M7 oProgram.argSize = 100;  /* minimum size */
( o+ P8 O9 M, e. l5 ?/ tProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-19 16:10 , Processed in 0.042237 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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