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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ @0 P* y" \. j5 }9 e) x
5 i$ B7 B0 G* ^$ e) w: v9 \% c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 _' \  ?& a2 H) l( ~
8 S. w/ f. A% a/ W7 p, ]6 Q2 ^
其他程序段。。。。。
6 W6 }( e4 b7 O( V/ c4 r+ r8 b - C  ^( ]5 X1 K, ~8 V
   free(x_d);$ c' W) V" |! u; `- R; j1 ^

* E5 }- _, s5 }( p5 ?) @8 `使用DSP侧单独调试功能,验证动态申请没有问题,
  Q8 a6 y6 x5 A5 R2 M- `( u. C9 v$ l- C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 h+ A2 n& U, j& U4 @3 u5 U0 v7 |5 R0 Q
3 T: K! G) C/ u0 g

0 _$ w' V# j7 K" P( v% G  F. ?, H/ u) a( ~. p5 N

3 ]/ q! R3 h+ e, }1 z
# X/ f, r3 I2 r. R: I6 d3 Z9 D& `4 }8 W& O8 |9 I8 P3 E, Z; E
6 L$ O/ O8 O1 T1 _( A1 Z3 j- i
2 r0 D) @. O4 Z/ d: g( l9 m! D; w8 L

9 m5 `4 M- E+ ^$ W5 m0 \8 g& g& t1 u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  C" s$ c5 V, U: ]
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' M7 Q, h9 i- p( D1 Y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ n5 R  h4 l4 I
/ U" v$ O. J0 ~' {! X: B
是不是需要在DSP.CFG中进行配置
+ F2 ?& T& L5 ?4 P我现在的配置为4 \$ K! X9 N2 a# p3 Z

4 ]" s" h* l& }2 m. }# Z/*% f- _1 x  n& ?/ [; S1 W
*  ======== Operating System Configuration ========
% D0 {7 s3 A: D, [. P */9 ], r+ s* P* v9 n9 v
! i( r- ]% b& i, O/ {: U
/* no rts heap */& v" U6 m2 B! g& I3 e2 B
Program.heap = 0;' C( t6 u1 M% X) U2 U5 B4 [
Program.argSize = 100;  /* minimum size */
; ]4 d' w6 I! W: E" i2 |: ]Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 K' T% L6 Q  l& B( b
( C/ x8 }+ b% Y7 S. L6 z  f% {+ |8 a
/* create a default heap */
! Z$ S8 `2 E0 [. Y& N6 G$ l( W5 mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% n/ x% x+ K% f. [( Vvar heapMemParams = new HeapMem.Params();) O1 a/ J. j& E3 z+ z0 w5 S+ p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 i0 v" J0 T: G) L2 Z: u* [& I# k9 A5 G3 H( i7 `/ s5 Y6 u5 K' ^
var Memory = xdc.useModule('xdc.runtime.Memory');& {# N) Y# l: q4 J8 W5 [7 h, ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ z7 \) A: J8 Q) _* p8 t; d: B3 O# h# f3 [( Q
/* configure System module */; r7 d' o6 [/ @1 z
var SysMin = xdc.useModule('xdc.runtime.SysMin');
" E$ u( X& w) [& A( nSysMin.bufSize = 0x1000;
1 i$ q6 ^, ^$ S. p* t: B; [SysMin.flushAtExit = false;
& f& M5 ]9 ]1 U6 R/ L# d( \+ ?* O5 C6 q2 n( L
var System = xdc.useModule('xdc.runtime.System');
7 a, O. z8 m$ XSystem.SupportProxy = SysMin;
; b: S5 L& B8 L+ h' l3 A3 `2 w# R3 s1 ^( m8 F$ e
/* configure SysBios to use the lower half of Timer 1 */
1 U9 Q& K9 D+ U# Tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& |6 g: J2 R0 A+ fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
- L7 U7 `8 M9 e5 Q: n, _Timer.timerSettings[1].master = true;. v+ s' z) g! h7 G! x4 \/ {
Timer.defaultHalf = Timer.Half_LOWER;2 z1 A) X3 f  q: }* V7 p1 N
Clock.timerId = 1;$ W0 _0 S$ D  S9 C3 l7 e0 ]" ]; h

$ X, p! J" m3 s0 @7 A( b
; m, A% J7 m, t& P  _/*
7 [* F* z# V/ i *  ======== Miscellaneous Configuration ========* M% G  Y4 e/ H  Q$ K# `. ?! N  p
*/  ?5 P0 L7 N7 r8 p: l/ x

& l) k8 l% j; W  K/* set default diags mask */1 _  C& f: C4 Q6 d0 \
var Diags = xdc.useModule('xdc.runtime.Diags');
9 I( Y: M9 Q, {4 t$ u9 kvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 Q% J; |9 q, p4 W4 l
6 x% h5 h4 D% g& t& sDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ r; U$ v9 ~& ?, Q& o. a$ ADefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- o1 P5 ]& K6 H5 A; h" q
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  Q" M$ d7 a2 C8 IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: j; g; c' P' }9 _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */* D: R) S. v2 T- k$ ]6 ]# e
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 X8 z! x9 T# ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, D# y& S; r: r; {! m# `% R, eDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 v) }/ k' @( Q8 T; W8 w; w( yDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 G$ i  ~0 P; `7 g
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. L5 ~$ \- I3 A
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# T) C+ ?! O* s
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: w2 r- |# |# A5 Q) {) v' N- F5 ]Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# ]( q$ l0 A: J- @8 g2 A' v- _8 C  DDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& L# i  P( M( |8 b# J, F0 B

) J" A6 `/ o# |. G/* override diags mask for selected modules */
# e7 l, d5 W+ z- Z) L5 z6 |7 S# p1 Jxdc.useModule('xdc.runtime.Main');
0 ^/ V/ J; S, {. K+ {  s3 c7 x) fDiags.setMaskMeta(
/ ?) T1 J. E# p- t7 t: f$ A4 K    "xdc.runtime.Main",
: W) ]; S8 _0 U) H% j. Q$ G    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 z0 W' t: R) ^* P1 D- e    Diags.RUNTIME_ON
% j$ K1 N/ c8 S# h  A);3 N; Z" q$ t) `4 m. ~

# P# ^. }8 w7 lvar Registry = xdc.useModule('xdc.runtime.Registry');& G$ u5 O7 ^( [+ p
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! X/ G4 k6 T% r4 h# h6 x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ g" y- [9 m+ D0 wRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 g  q" u# o4 G
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' g8 H- z5 I7 y7 Z( v  @* Z
5 X; C$ E$ B& j1 h+ U7 ]/* create a logger instance */; r7 N, L" o+ F
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 \2 D& B+ q! F3 m+ Hvar loggerBufP = new LoggerBuf.Params();
1 i( A1 K- ]4 w5 f; |! U9 wloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) l/ S* m3 m9 \# U# A6 @8 {1 D. u
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" G) a. @9 u) f6 K- C  l
) i& u8 c4 S! Lvar appLogger = LoggerBuf.create(loggerBufP);& Q7 e5 z- W7 u" {& y' P% b( x" W/ a
appLogger.instance.name = "AppLog_Core1";
: u, J' ?) p" PDefaults.common$.logger = appLogger;
3 c# a# B3 ?6 y$ i+ k9 cMemory.defaultHeapSize = 0x8192;    4 w0 t( p6 |: Z& n3 v
Idle.idleFxns[0] = "&LEDStatus";# I/ H. ?, L/ q
Cache.initSize.l2Size = Cache.L2Size_32K;+ k7 l0 U& ?# e! \: e, e4 ?

; B, V% r; _# P1 [
回复 支持 反对

使用道具 举报

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 */
* X, M$ z4 D! avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');7 ^7 V/ i- c6 C  [+ K9 D# s! s+ i
var heapMemParams = new HeapMem.Params();8 ^5 I. H9 d( M; r( L7 y4 v' o+ O$ e
heapMemParams.size = 0x4000;! {" t0 L: m- V+ R
3 P5 D+ K0 C) e$ [7 C# |
var Memory = xdc.useModule('xdc.runtime.Memory');
! T/ l5 {+ u, k7 CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( Y- g5 o7 h2 M6 R* L4 @. z2 B
) C6 L% M1 i9 ?8 t( N' r我大约calloc  每次共计大小为5K*16bits,
+ g4 ^3 k/ E: e% U" e/ i0 N( V而默认配置才0x4000、需要改大。
9 P3 c, ?. t6 {( i" U
" h( \# a) h/ T8 A, ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 F. t" }7 e. j% H# W' yProgram.heap = 0;& H1 @* ?, n6 C4 {- c
Program.argSize = 100;  /* minimum size */$ X( C6 k+ v: G( l7 d3 @! j. U* B# F
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-25 00:23 , Processed in 0.043281 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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