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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ y" h7 b- M/ U- v2 |6 ^
. A* T  N9 n6 i' z  C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ m- p" f" s, r; R2 e* |8 b
8 x: a" o0 y' t$ k, T! H( [其他程序段。。。。。
/ {, O- o' d/ P, I
1 g. Q7 q( w" i& [8 A  Z% c   free(x_d);
! r; r: A* N2 O6 K! h- A) c7 Q+ R0 x) h+ R2 ^
使用DSP侧单独调试功能,验证动态申请没有问题,( p- }) {2 H( N( a1 _& h

7 I* T' |. ?- a- M% x0 D但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ ?% K3 G# S. O6 }0 z( K) Q
& r; m1 \# m" u$ s* s

5 c4 t" d. y5 ], o4 S+ U1 q  D  a  _4 b! \; P
/ u! @" y3 [+ V: Z

% s4 m3 q3 Z9 K8 X9 f) P: I) ]. N6 Y4 V; e8 s( n7 r
% p; U8 r4 |( h! [
6 X* L* ]2 c) z8 D

% A# q( K) X( U1 R- F) T
2 z% o/ \0 ]  a2 \# B% `8 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  n  V" y: `. A& d8 w* T. j+ W. f我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% f& d9 |8 V0 @8 l
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; Q3 l* b# a2 H" @
+ r4 U* R/ }2 |3 g. U" B
是不是需要在DSP.CFG中进行配置5 B& y% E, ]/ ?8 S( p8 ~
我现在的配置为
% G+ ?! F, x# c# [9 L3 |# _5 W& x2 L! h+ N7 H* d8 \! i! l
/*0 c+ Y, G0 A* c  ]
*  ======== Operating System Configuration ========  M" s0 Q+ ~6 j4 w4 k4 j+ Y
*/5 c6 j8 |6 Q6 S: _- y
% p: ^. q" A2 c6 m9 B/ L' m
/* no rts heap */2 K% V: }8 N$ c) p* p
Program.heap = 0;
7 n, E; q# C& g) J) J" VProgram.argSize = 100;  /* minimum size */
, |$ S) r. L7 r( A: KProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  o+ n# H2 t  ?" k1 l5 l8 U9 {3 @
  R7 [; u: O5 M; C+ n3 w# B. P) ~
/* create a default heap */
0 x6 R/ o3 n  G2 tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( T; O+ X  K/ [1 c0 ]- r5 ~
var heapMemParams = new HeapMem.Params();
  Y1 o( \; Q; Z9 g4 U- L" W& oheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' }7 s: y- L3 v3 ]; w' O, q% S

2 k3 V. G/ n5 c+ e+ s( _: r& q* E
var Memory = xdc.useModule('xdc.runtime.Memory');, ^3 _3 R. ~' Z' m, Z0 F0 F1 p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ W' E* P/ A5 o1 E7 t
  w) ^: R) U- Q. p4 ~
/* configure System module */
, [( |/ @4 S5 p9 Vvar SysMin = xdc.useModule('xdc.runtime.SysMin');7 _8 W% O1 v7 e9 ~3 I$ C
SysMin.bufSize = 0x1000;
" z% O" W( m1 `$ n8 F/ w; [' MSysMin.flushAtExit = false;9 O6 ~; b9 g. `2 C9 H

0 Y- G8 r4 g2 H: U* S! }' vvar System = xdc.useModule('xdc.runtime.System');6 _/ j! a9 {; N% @
System.SupportProxy = SysMin;
1 S, ?" @. X1 b+ I5 f1 G- g( O* `* T& ?- C& K: S% Q9 h
/* configure SysBios to use the lower half of Timer 1 */
6 d& G, {8 {) `, Wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 e  m9 s0 Y1 [5 qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');/ q" N6 x* x; x% {+ ?3 M+ ]
Timer.timerSettings[1].master = true;, {7 i, C9 e) I; _$ Y
Timer.defaultHalf = Timer.Half_LOWER;
8 R" }/ w3 Y' dClock.timerId = 1;. o: I* o: j8 k! j  T, _1 h; j/ C- J

5 C% o- B8 x7 U/ A
, s, g- u2 z7 T/*! g; W9 ~: r  o& X5 {* h) o5 v
*  ======== Miscellaneous Configuration ========0 ~# k9 ?/ a* `# f( D9 m
*/, e* Q' e+ q8 c* ~8 [

+ e% q4 E/ w1 J/* set default diags mask */
# P0 }* ]4 m. j9 q9 \var Diags = xdc.useModule('xdc.runtime.Diags');" ?$ @* ]5 a2 r
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ Z( l" g& b+ ~, n9 n8 b+ l6 S& M( D9 q( A, h1 @
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;; L3 g9 U# J. f: |
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 ~0 e. Z7 ^2 K  h/ }$ l! @3 FDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( d6 R, p3 B* D% nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 n8 ?7 T# X& p- g5 YDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! j5 z4 p( }% g& m3 n5 `
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# Z' [0 w6 L: N, b8 C2 dDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 s8 s" c- J& t! s" x. rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 R; m9 |9 g. T6 \" c
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;% [& ]; G; N3 _; H$ ~, ^
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 H. A7 R* e) ^5 l+ L
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 q$ L7 R6 s) v3 s9 T
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' ?+ K3 V$ K6 w9 e' DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 y6 s  q5 ?. W$ g. Y  u7 n# e+ fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 B- d, G5 o  \3 I& B+ f; {
& t% M1 h  ^) `/* override diags mask for selected modules */0 w' q4 |' K5 E: Z% G
xdc.useModule('xdc.runtime.Main');+ m4 i& h( R- i1 i& K  U
Diags.setMaskMeta(
9 ]3 N; O; r+ x  O& j! i    "xdc.runtime.Main",. c' w" n/ K; N' h7 o9 w0 R
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  |1 J* G; U  p  j5 M    Diags.RUNTIME_ON
. i: [( s3 }0 T! u% e# B);7 T0 g" H% a/ A6 R

+ S# _( S! r$ n( C. S% T8 Fvar Registry = xdc.useModule('xdc.runtime.Registry');3 a# `' L" c0 v9 _
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 n% T+ c8 k$ [. W$ t
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. c* d# v) g( @) g
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 y# I, M0 x* v  HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 \" U0 u5 d3 z/ D
1 E3 j" j; Q+ F3 ^$ J8 i, i6 U/* create a logger instance */
  s0 m( J% {! Z* J# Bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 b: c" s/ @4 E  [2 r, q+ D4 N# H
var loggerBufP = new LoggerBuf.Params();% I) P3 I8 ]2 ^
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# Z2 y0 O, O. y' `: N9 DloggerBufP.bufType = LoggerBuf.BufType_FIXED;
, o0 b$ o+ R' F9 s% p9 H
5 ~  y' i& R' ?4 |) uvar appLogger = LoggerBuf.create(loggerBufP);7 l2 F; k/ b/ Y& ]. O* V/ R" x
appLogger.instance.name = "AppLog_Core1";
5 _3 _. T" [6 z3 p$ e' f/ X0 r  iDefaults.common$.logger = appLogger;
" I  k2 _( j$ \0 p! q) F# D' MMemory.defaultHeapSize = 0x8192;   
( g9 I  F3 N. W0 i8 O' dIdle.idleFxns[0] = "&LEDStatus";
3 |8 ~" W' e& A! i3 b0 wCache.initSize.l2Size = Cache.L2Size_32K;* b# @( V! E3 Q$ c2 k0 n+ K1 w

& o( [5 `) [  |, y" K% O! q$ b% c4 T
回复 支持 反对

使用道具 举报

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 */' R2 y; X! \( z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. ?( F6 _. G: e
var heapMemParams = new HeapMem.Params();
' b$ s: y/ S7 }# i; gheapMemParams.size = 0x4000;: Z3 J$ h" @* g% E0 \2 }: r+ |
8 [( G, P( N9 ?, J. h
var Memory = xdc.useModule('xdc.runtime.Memory');, ]* B  a! d4 E( d/ u8 }3 o( B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' Z  g. l* ^) E  s+ m7 v# Z% q
6 n6 M0 @! X2 h$ d2 o我大约calloc  每次共计大小为5K*16bits,
9 ?" [3 Y7 R* s( n5 P; I而默认配置才0x4000、需要改大。
9 a5 p/ {/ {8 ]6 v, i( u$ \
/ t5 T9 M6 W, f) e( k; }) o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 ~: T0 C# x0 TProgram.heap = 0;) l. l6 @/ G# w8 {# f; [
Program.argSize = 100;  /* minimum size */1 j) A8 A" N7 h; Y
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-17 21:51 , Processed in 0.040463 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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