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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构! A' C1 ?3 }8 R( p/ @5 x5 U
- @2 ~% K: j) v& ~3 d& `2 G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. x# s5 |( z. ^% \+ z

: i% B6 p  p0 U& [2 Z/ ^! C其他程序段。。。。。3 l( {  q2 M8 ?
/ U! r/ i! Q- `% O3 n
   free(x_d);
3 R( h* v( D4 f; `: J; d+ H- B5 f5 i1 e: m$ c
使用DSP侧单独调试功能,验证动态申请没有问题,
/ p( E# k& |$ h8 ?; o; X
, E3 }2 ?) y2 Z7 ?但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 o( P8 Y9 O  ]9 i. C# u+ ?

& f- g- Z# d" c8 _$ Y2 P
( a  |. J2 n  \" x" y3 f6 z' j; a/ B1 K1 R0 S" O8 n: ^
3 l0 l5 Q, f" w2 f
% I" _5 I$ r6 N3 s# M4 _
; z3 ~. p* w" p3 e; N# F

% Y. ^* u% b# H, R+ K" J# z+ E% @6 e* c( d/ H

$ |7 C( a  J) V) S
9 e6 i+ G5 y2 ^7 H) A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 a2 [2 [, o) n9 b. v. X我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 l% x- [7 b2 m# x( F/ R+ B  {( ~. ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 G; n1 M8 W9 P/ m1 T4 g
& n# d5 |* w) j' }& `% K
是不是需要在DSP.CFG中进行配置
/ e: o7 s: B( h/ F9 v- ~8 c我现在的配置为9 E7 h- q9 x7 Y: u

! s$ V* L& G& e6 M/*
! {  S5 D% G! Z  ~" m *  ======== Operating System Configuration ========
1 K3 ]5 W. Z1 H4 q */' W$ [* Z; u1 c" y  [- d
6 }7 e4 t" N$ c
/* no rts heap */
0 e" z1 B/ S* C5 h8 c5 S; U3 Y" cProgram.heap = 0;
+ j( q7 n( f' N2 ~% C6 YProgram.argSize = 100;  /* minimum size */" `" Y4 g! |3 B* u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: x  e0 H1 k% l% J( }& u, S
# G5 I! A# {4 w( j! r8 S3 k/* create a default heap */: H& J; q& e1 k% x  n8 W8 r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* `4 L% J3 I, T. uvar heapMemParams = new HeapMem.Params();4 t! t& R+ \3 ]% _5 Y* t( [8 k
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 z3 b* Z: {2 j! f7 o( \' m

/ s7 _. t1 d4 E7 ]& y" a& G# o# `
var Memory = xdc.useModule('xdc.runtime.Memory');
. P: [, {7 f) ^0 z* A! tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! X7 r* P% T0 C9 z; m( a1 p2 ~3 e/ |, f; Z$ e
/* configure System module */
) V7 R5 b" E# E5 j. t, X, zvar SysMin = xdc.useModule('xdc.runtime.SysMin');
! }: B$ Q1 g3 a1 ~  X# E' _6 jSysMin.bufSize = 0x1000;
" m2 @7 E/ ]# n1 ]: X. RSysMin.flushAtExit = false;' {7 ^3 k6 E) I4 [* \% P% E1 V0 g
( ]  H% k2 _" j8 `0 v
var System = xdc.useModule('xdc.runtime.System');
* |$ E: K: J7 |System.SupportProxy = SysMin;
" v# E* T. [8 n; `, A' ^7 m7 x
" q7 S# n4 `* a/ E: X/* configure SysBios to use the lower half of Timer 1 */5 C2 o4 o2 a+ K  R0 O3 t
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 N" H; z  R  U, g& {# _; gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
' Q4 Z/ K, k2 v- A9 y: f5 E$ b+ q) iTimer.timerSettings[1].master = true;( M  E6 `9 R& v: ^7 {3 `
Timer.defaultHalf = Timer.Half_LOWER;7 W! @# h& O" y
Clock.timerId = 1;
( p. b7 N% Q' T* p4 e$ }
, p) R: I. z1 }: @- Q9 g! x9 M$ e' J6 h4 }  e! M$ F8 B$ b$ X( h7 H6 m1 b( ?
/*5 q6 O# m$ L+ U$ g& P0 `- e
*  ======== Miscellaneous Configuration ========7 m3 X5 E2 j3 X  m7 k
*/
$ o! G6 W/ {9 k4 G: o) o5 P( \8 S1 y4 d+ R9 K. N
/* set default diags mask */
! F- B# q0 a9 c. Y5 [+ z7 ~: {var Diags = xdc.useModule('xdc.runtime.Diags');. J  l1 G" s/ u0 _6 F$ K4 }
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' b7 x+ k' W% t" a3 ^+ @6 ?4 E
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( `" L' h. W. f1 X
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! Y" E+ t* f5 f$ t: R
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. F) |$ F8 y- ]/ `4 G
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; ~$ Y8 D8 G- mDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 l  D, f/ G3 G* I' S8 ^7 HDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" B( N' [* I8 ?" f6 SDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% k* B- }3 @# I5 dDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 Z' D+ K% D+ x; ], M& o: k
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  e" R3 U3 f: c" {/ }Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
0 f: C) x0 @8 K; @Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 o- w) Z4 E3 B% Y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 v# _) C2 X' a5 o0 Y0 z% ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ O& {9 r/ x- t0 x7 C+ x4 j
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  r) b& t% v: U- N: }9 v
7 ?3 _  l; g8 w. M( i$ t* H
/* override diags mask for selected modules */. O! Q0 Q, k- c% t# Z5 J! n
xdc.useModule('xdc.runtime.Main');" S1 k( @5 T! a
Diags.setMaskMeta(
9 m+ g3 M. k) s+ U- H" _3 C    "xdc.runtime.Main"," u+ A, {0 w2 A2 s+ A6 }
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ h8 v. b* i! z/ g/ ^    Diags.RUNTIME_ON8 |5 ]" t" p1 h0 X) I" N
);
' g% v: f& ^1 U8 G+ t* b
: M6 S+ m5 M! E+ c& F4 y2 Z  w3 zvar Registry = xdc.useModule('xdc.runtime.Registry');
+ V: D# I1 ~1 H6 R. ]1 o  _- M  K0 GRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ {. {" f9 A/ ]Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 M. T1 N1 M$ d" ^/ X* v% n& d0 O9 ~
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;. r! K/ W; e! c* ]9 a" t! R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;" M5 ^3 k( i3 y' f

$ f7 U1 \  m6 W# u* l. W1 j/* create a logger instance */
6 ?% Z2 X; A: u2 l" x; V: K+ j: rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( A# {/ _, h. [2 f
var loggerBufP = new LoggerBuf.Params();* H( l! B. n" |$ J, r" L3 n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, `) x1 q9 G3 h6 {$ |* \" W5 R. [' ~
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# L3 `1 t1 V; F# D  N- X4 X1 \# C; T- A
var appLogger = LoggerBuf.create(loggerBufP);; }3 U+ |' Y8 T6 b/ d) g+ \
appLogger.instance.name = "AppLog_Core1";
8 l: j7 C8 @; N" QDefaults.common$.logger = appLogger;) e- _" u9 U3 c& g  j! W& }
Memory.defaultHeapSize = 0x8192;    # Z2 {, }. V1 h
Idle.idleFxns[0] = "&LEDStatus";* q' V/ E% c+ w" C2 V
Cache.initSize.l2Size = Cache.L2Size_32K;) j) b9 P$ K" x5 J) B  U, J) ]6 p

, E" I2 X1 c$ Z' B) E
回复 支持 反对

使用道具 举报

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 */
3 S- p( H& m! _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ O2 v, Q. N& b
var heapMemParams = new HeapMem.Params();  l" F' N. V8 U4 [2 }" u6 {7 h! v
heapMemParams.size = 0x4000;
/ _0 e( l- K  @) ^  S+ ^+ j" ]0 \# V! H! {6 B5 ?- J6 \% q5 l, B1 k
var Memory = xdc.useModule('xdc.runtime.Memory');
/ }( d7 n  z6 CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 q0 m1 k$ }4 m, E8 H
1 C) R9 q6 F: ^" D
我大约calloc  每次共计大小为5K*16bits,$ N8 V8 K3 [( c+ k7 j3 T
而默认配置才0x4000、需要改大。4 c$ V2 w- e' |

! R7 R6 N( p4 l7 X1 f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% u& a  I' {0 AProgram.heap = 0;' a8 L# L- j4 e/ ?' \
Program.argSize = 100;  /* minimum size */
5 ?4 N3 n( \7 h# X$ lProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-8 09:13 , Processed in 0.049885 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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