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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 C1 Q8 q% a8 u- U2 v1 Q, F' V) K* b9 V  g) L
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 n; `# c; i" P4 r
4 }8 z6 a0 _' m其他程序段。。。。。" c; F! n9 [: J5 t
$ C! p$ f+ r% b% |
   free(x_d);* V# u* T) [" g" b: s! L
5 o* M4 P( K3 W
使用DSP侧单独调试功能,验证动态申请没有问题,3 _/ S) C, @: X: L7 s

. C3 N3 d! }8 l9 t; q3 z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ C& A! X# I$ n% I
+ z7 _6 j0 x* z$ ^
9 A9 d$ F5 b( w. j7 w

; p" w- e0 \# z. Y
" z$ |  |4 e. w& H4 G
$ O. K8 u. E# G  {* d
+ c0 I! d0 z6 [+ B2 B% X
8 V( e+ C# ?: E( Z
4 D% r, J3 i. C/ C, }0 M: Q/ k- d- ?! X1 \) X' b& F9 K2 X

; v# j( U6 B/ t8 v6 P$ D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- F1 J# T. H, a
Program.heap = 0;
6 y# e3 b, x2 v4 R" D4 d0 V+ JProgram.argSize = 100;  /* minimum size *// c6 \$ J# r3 a7 H1 E# g4 M  @5 x" ?
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */$ e- U5 Q( Z" |. k( j+ y' W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 `/ ^8 i% \8 a# nvar heapMemParams = new HeapMem.Params();
0 K5 \8 [  L  y8 XheapMemParams.size = 0x4000;
6 }! y. M: ~4 ?5 }- W- ^' Z) U# d# L& _! \
var Memory = xdc.useModule('xdc.runtime.Memory');
( M. ]" i+ X. d6 F# ^6 NMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, J5 I4 D7 K  P2 U

2 O5 z$ X5 P8 L+ o) q( z$ y我大约calloc  每次共计大小为5K*16bits,8 U% H! ]: ]3 }( @. `5 b7 B
而默认配置才0x4000、需要改大。
  t- l+ x; w! \( V
% i) i- z& t0 e5 C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 t; E+ q) N$ m) r- _3 \: A! q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ u$ J: w6 a& z+ t; O1 c' Z' Y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 B, \- d3 |+ Y5 V( C

% M" I* z0 c6 a" g是不是需要在DSP.CFG中进行配置
. s0 I% n2 i" }8 ?0 @我现在的配置为* I7 q/ o# u4 B' x$ Q' J
4 d) u( Y0 a7 m7 c
/*
$ y$ y- w+ _5 @* k *  ======== Operating System Configuration ========
( h, _; d( C) J */- {7 n* u5 f' i& F4 g( R

" ?1 h) x; L( D! e  g/* no rts heap */6 Q) d) M7 `( }  l  C- u! c9 p
Program.heap = 0;; t* ?/ i) I8 X/ J$ c" U& o9 r6 C3 o
Program.argSize = 100;  /* minimum size */
5 O- k% b) P& W7 oProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. F, }4 i5 l* }) R
% K3 _1 r" [, h$ c3 R6 _/* create a default heap */  w+ w& c: a+ K" N  E( U' n: |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 Y( V' b$ t3 ]0 a, G" D  m
var heapMemParams = new HeapMem.Params();
( G. t+ c3 Z! ]+ O  R* z/ F! yheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& g$ m1 A/ r- A" L5 G- c
9 ]9 j( ~6 Z6 Q4 T
var Memory = xdc.useModule('xdc.runtime.Memory');" ]) o: x- o5 u( N0 A) p4 a. N$ J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& u9 B9 }1 \2 _
8 E& H$ @1 K: A& s$ ]
/* configure System module */
* A9 C' X/ \3 F1 d; Z* yvar SysMin = xdc.useModule('xdc.runtime.SysMin');/ d, j) \, X4 p: g: Z& u
SysMin.bufSize = 0x1000;
' E$ L( r9 G5 A2 k2 @SysMin.flushAtExit = false;
/ s' B- K: P5 v  s0 |
/ I* b' ?5 G4 o  mvar System = xdc.useModule('xdc.runtime.System');( M8 D* Q1 p( Y* x
System.SupportProxy = SysMin;
0 w; W0 @4 c2 S# t) d& |4 o! Q# F; t5 L6 H( J* Y1 I5 P
/* configure SysBios to use the lower half of Timer 1 */  y* [8 @* Y4 Q# T
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, t. {4 B* E. M: d+ Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');1 M9 t/ t; O4 r  k# f
Timer.timerSettings[1].master = true;
# i- b1 D$ g+ Y# m1 KTimer.defaultHalf = Timer.Half_LOWER;; ?2 {, k& I) S4 E/ T
Clock.timerId = 1;
5 k! U! s7 z3 K0 v! V/ _, O) N; o- g2 [3 r9 g5 F+ U+ J) F) M

" D! A! ]6 p8 \0 _. y/*& O4 V8 P% q" L: [' \: Z
*  ======== Miscellaneous Configuration ========
* p, l# h+ y4 y: y0 T; o */6 ^: g+ f, c' o! \' U: F- A
6 R# g, d' P) \
/* set default diags mask */2 K: E1 V# |9 W; e+ q# W( G
var Diags = xdc.useModule('xdc.runtime.Diags');0 z, d8 P' W7 ~$ C% w. }' l0 U. n
var Defaults = xdc.useModule('xdc.runtime.Defaults');4 M" q. p+ }7 a# S9 @
1 O+ t& ?* ~: _1 m* q1 S
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 m) {, D  A  p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 Q9 G' m' d+ Z% C7 U4 m
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 I. p$ W* ~! L! Z! v  J4 d
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; p" a# S1 F$ h) r& m. V6 }
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" U# [" H3 D4 O& }% ZDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ F$ B0 V( g: H6 H  {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: ~+ q% C* B: F7 iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 }6 H! k# E3 Z( B( r% F0 n
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% S! u' c$ T. \. w4 Q2 {Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ ]" l) ^9 t3 _6 G' z& e9 k  i
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. T- R% N! l6 Z& ?; RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! p% _. Y) |1 ], kDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 c0 {5 h/ P  ?. n# M9 n; S7 ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 P) h' A; P' }- K

. K: p* c/ R1 E9 Y  _/* override diags mask for selected modules */
$ o/ z. M" S4 K& ]xdc.useModule('xdc.runtime.Main');
/ |; u8 [, M/ O# z% ^( x( W" E. xDiags.setMaskMeta(8 F/ e, n6 i1 i3 l' D- o, O
    "xdc.runtime.Main",( o/ G6 P) u. @: F% u. Q
    Diags.ENTRY | Diags.EXIT | Diags.INFO,! _9 l1 [8 E. V6 v- V0 Q; f
    Diags.RUNTIME_ON
4 W: B# Q, U' S. o);3 p. O' P1 j1 v8 ?6 ^  Q6 U

4 ^* f% c9 A% H1 a5 S4 s% ]7 Hvar Registry = xdc.useModule('xdc.runtime.Registry');5 f6 C$ R, R  d- ^( S
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  {' ]7 v, L, a/ R/ k% {6 c
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, T, P) U" T0 ^" g+ g% ~Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 f( F7 i# K4 O3 r* t9 \) e
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 `$ l3 I/ K) b( ~, B4 b

. C" G5 ^) G& ]+ Q% U6 }" h0 P/* create a logger instance */
4 _) @) O  X; _9 z9 `% U, Z: lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" D+ _& M( E- {$ e; E; Q/ f, N
var loggerBufP = new LoggerBuf.Params();( i5 A1 @  V# ^0 ]! R* ?4 B1 Q  B# o
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
$ [, @! z2 R9 W$ a. D+ N  sloggerBufP.bufType = LoggerBuf.BufType_FIXED;$ F' Q- U, j+ M+ M
" a8 d, s% [1 C; q; g
var appLogger = LoggerBuf.create(loggerBufP);
! T# `$ C( c$ P* h3 E# bappLogger.instance.name = "AppLog_Core1";) U+ ]. f2 g/ v7 {+ N8 N
Defaults.common$.logger = appLogger;5 X6 [8 Z' u- N# r( q# q, s9 k
Memory.defaultHeapSize = 0x8192;    5 ^: W/ E! f- D8 S2 N5 w# x9 O
Idle.idleFxns[0] = "&LEDStatus";
8 m% W, z% h* K6 uCache.initSize.l2Size = Cache.L2Size_32K;9 @! g/ Y5 g9 E
4 C  C3 m/ z  i" P# b' Y! F3 T
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-24 09:13 , Processed in 0.043890 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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